Intellij Syntax highlighting has been temporarily turned off 에러 발생시

Bean 주입받는 모든 곳에서 import 에러 발생

File > Repair IDE 클릭 > 문제가 해결될 때 까지 Fix Next Step

 

출처 :

https://github.com/kotest/kotest-intellij-plugin/issues/168

 

반응형

Resource interpreted as Stylesheet but transferred with MIME type text/html : "~.css"

[원인]

css 파일이 text/html Content-Type 으로 처리되어 나타나는 현상

 

[관련 자료]

1. stackoverflow.com/questions/22631158/resource-interpreted-as-stylesheet-but-transferred-with-mime-type-text-html-see 

2. www.mins01.com/mh/tech/read/877?ct=&tq=tt&q=css+mime

 

[해결방법]

컨테이너 webcommon.xml 의 확장자별 MIME 타입을 지정한다.

1
2
3
4
<mime-mapping>
  <extension>css</extension>
  <mime-type>text/css</mime-type>
</mime-mapping>
cs

참고:

czar.tistory.com/627

 

 

반응형

ORA-04091 trigger 가 호출될 때 아래와 같은 exception 으로 실행되지 않을 때가 있다.

 

ORA-04091: ?테이블이 변경되어 트리거/함수가 볼 수 없습니다. (한글)
ORA-04091: table ~.~, trigger/function may not see it (영문)

 

원인 : 

table A 에 데이터를 insert 하기 위해 사용하는 trigger.

이 trigger 내부에서 A table 을 참조해서 사용하는 경우 발생.

(loop 발생여지가 있어 oracle 에서 이를 막기위한 ex 를 던짐)

 

www.techonthenet.com/oracle/errors/ora04091.php

 

 

 

반응형

vmware 에 우분투 install 시도시 위와 같은 에러팝업이 뜰경우 조치

error : This host supports AMD-V, but AMD-V is diabled 

bios 진입 후 virtualization 옵션(SVM mode)을 찾아 disabled -> enabled 로 수정한다

* bios 는 운영체재 부팅시에 F2/del 키 연타로 접근

반응형

[에러로그]

2020-05-12 10:44:05,194 INFO org.springframework.scheduling.quartz.LocalDataSourceJobStore - ClusterManager: detected 1 failed or restarted instances.

 

[원인]

쿼츠 클러스터링 모드에서 인스턴스 간 타임싱크(time sync)가 맞지 않아 발생하는 에러.

 

[해결]

ntp(network time protocol) 상태 확인 및 설정 필요.

 

 

https://stackoverflow.com/questions/15701417/strange-behavior-of-quartz-in-cluster-configuration

 

반응형

 

현상 : 

QueryDSL 을 위해 Entity에 대한 Query Class 생성 후,

junit 테스트를 돌렸으나 생성한 Query Class 를 찾지 못한다는 NoDefClassFoundError 발생

※ NoDefClassFoundError : compile 시엔 문제없으나, runtime 시 class를 찾지 못하는 현상 (참고)

 

해결 :
1. compile 은 성공적으로 되었으며, compile 한 jar 파일을 실행하여 해당 메소드 호출할 경우 문제가 없는 것으로 보아

build.gradle 혹은 코드문제가 아닌 eclipse 설정이 문제라고 판단.

2. project property > Java Build Path > Source 탭 확인 : 이상없음

3. project property > Deployment Assembly 확인 : 상대경로로 지정된 패키징 경로가 존재.. 해당 부분 제거 후 문제 해결

 

 

 

 

 

 

반응형

 

ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

 

SET GLOBAL log_bin_trust_function_creators = 1;

위와 같이 설정을 변경 후 function create 다시 시도

반응형

[현상 및 에러로그]

bad SQL grammar [SELECT E.JOB_EXECUTION_ID, E.START_TIME, E.END_TIME, E.STATUS, E.EXIT_CODE, E.EXIT_MESSAGE, E.CREATE_TIME, E.LAST_UPDATED, E.VERSION, E.JOB_INSTANCE_ID, E.JOB_CONFIGURATION_LOCATION from bomdb.BATCH_JOB_EXECUTION E, bomdb.BATCH_JOB_INSTANCE I where E.JOB_INSTANCE_ID=I.JOB_INSTANCE_ID and I.JOB_NAME=? and E.START_TIME is not NULL and E.END_TIME is NULL order by E.JOB_EXECUTION_ID desc]; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'E.JOB_CONFIGURATION_LOCATION' in 'field list'

 

[원인 및 해결]

spring batch 버전이 올라가면서 메타데이터 스키마가 변경되었음.

BATCH_JOB_EXECUTION_PARAMS 테이블 추가.

BATCH_JOB_EXECUTION 테이블에 JOB_CONFIGURATION_LOCATION 칼럼 추가.

 

[참고]

https://docs.spring.io/spring-batch/docs/current/reference/html/schema-appendix.html

https://stackoverflow.com/questions/25882740/unknown-column-job-configuration-location-in-field-list-while-using-spring-b

반응형

현상, Exception Message (Console) : 

org.quartz.JobPersistenceException: Couldn't acquire next trigger: 
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version 
for the right syntax to use near 'OPTION SQL_SELECT_LIMIT=1' at line 1

 

원인 :
Mysql Connector jar 버전 문제

 

해결방법 :

위와 같은 Exception 발생시

mysql-connector-java 버전을 올려준다.

5.1.22 버전 이상으로 올려주면 된다.

 

※ tomcat / jboss(wildfly) 를 사용중이라면 서버 module 버전도 올려주어야 한다.

jboss 경우의 예]

jboss설치디렉토리/modules/com/mysql/main/ 에 5.1.22 이상의 mysql-connector-java-5.1.22.jar 를 넣어주고

module.xml 의 resource root path 를 아래와 같이 수정

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.0" name="com.mysql">
  <resources>
     <resource-root path="mysql-connector-java-5.1.22.jar"/>
  </resources>
  <dependencies>
     <module name="javax.api"/>
  </dependencies>
</module>

 

참고

반응형

 

1. 참조객체 복사시 주의.

list , array 와 같은 참조객체 복사시 주소값만 복사하는 얕은복사 주의.

참고 : https://developyo.tistory.com/59?category=688588

 

2. Transaction 사용시 주의. 

1) @Transactional 어노테이션이 붙은 A method 가 동일한 클래스 내에 위치한 메소드 B에 의해 호출될 때, A의 트랜잭션 어노테이션은 작동하지 않음.

2) 스프링의 Transaction은 checked exception 은 rollback 대상으로 보지않음.

참고 : https://developyo.tistory.com/51

 

3. overloading 관련

오버로딩은 상속이 되지 않음.

참고 : https://stackoverflow.com/questions/31141834/overloading-method-on-extended-class

 

오버로딩은 컴파일 단계에서.

오버라이딩은 런타임 단계에서.

참고 : http://blog.naver.com/PostView.nhn?blogId=skykingkjs&logNo=150175869201&redirect=Dlog&widgetTypeCall=true

 

4. @value 주입시 주의사항

@Value 필드 주입의 경우 Object 가 생성되고 난 후 주입되므로 

Object 생성자를 타는 시점에선 @Value 값이 null.

@Value 로 주입받은 값을 생성자에서 사용시 @PostConstruct 사용 할 것

참고 : https://stackoverflow.com/questions/46035971/spring-autowired-and-value-on-property-not-working

참고 : https://jeong-pro.tistory.com/167

 

[@PostConstruct 사용법]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
 
@Component("CustomChatManager")
public class CustomChatManager {
    
    protected final static Logger logger = LoggerFactory.getLogger(CustomChatManager.class);
        
    @Value("#{systemProperties['jboss.service.mode']}")    
    private String CHATJAR;    
 
    private ChatManager cm;
    
    private static final String CHAT_SERVER_LOCAL = "http://1";    //로컬
    private static final String CHAT_SERVER_DEV = "http://2";    //개발 
    private static final String CHAT_SERVER_DEV2 = "http://3";    
    private static final String CHAT_SERVER_OPER = "http://4";    
    
    @PostConstruct    
    public void init() throws Exception{
        this.cm = ChatManager.getInstance();
        this.setServerURI();
    }    
    //채팅서버 URI 세팅
    private void setServerURI() throws Exception {
        
        String uri = CHAT_SERVER_LOCAL;
        
        if(CHATJAR != null) {
            switch(CHATJAR) {
            case "local":
                uri = CHAT_SERVER_LOCAL;
                break;
            case "dev":
                uri = CHAT_SERVER_DEV;
                break;
            case "tb":
            case "bmt":
                uri = CHAT_SERVER_DEV2;
                break;
            case "oper"
                uri = CHAT_SERVER_OPER;
                break;
            default :
                uri = CHAT_SERVER_OPER;
                break;
            }
        }
        
        URI suri = null;
        logger.info("chatjar : " + CHATJAR + "\nchat uri : " + uri);
        
        try {
            suri = new URI(uri);
            cm.setServerURI(suri);
        } catch (URISyntaxException ue) {
            logger.error("set chat jar failed ! : {}" , ue);
            throw ue;
        } catch (Exception e) {
            logger.error("set chat jar failed ! : {}" , e);
            throw e;
        }
    }
    
    public ChatManager getInstance() throws Exception {
        return this.cm;
    }
}
 
cs

 

5. 스프링+멀티스레드 환경에서 멤버변수 선언 주의

Thread safe 하다는 건 public 메소드 안의 로컬 변수가 Thread safe 하다는 의미일 뿐, 멤버변수가 Thread safe 하다는 의미가 아니다.

멤버변수는 주입에 사용되는 Bean 만 사용할 것

참고 : https://beyondj2ee.wordpress.com/2013/02/28/%EB%A9%80%ED%8B%B0-%EC%93%B0%EB%A0%88%EB%93%9C-%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B9%88-%EC%A3%BC%EC%9D%98%EC%82%AC%ED%95%AD/

 

6. DI 와 new 생성자의 혼용 주의

new 생성자로 A 객체 생성, A 객체 내에서 특정 객체 DI 로 주입받는 경우

DI 에서 null pointer exception 발생.

 

7. Interceptor 내의 멤버변수 사용시 주의

Interceptor 내의 prehandle , posthandle 메소드 내에서 class(Interceptor)의 멤버변수(전역변수)를 사용하여 처리경과시간을 찍을 경우 시간 맞지않음. (prehandle 에서 time set 한 후, posthandle 에서 time get 할 경우 엉터리 시간이 나옴)

context 흐름을 따르므로 prehandle --> ~ --> posthandle 간 흐름에서 parameter 로 들고 다녀야 함

 

8. Interceptor 에서 body 값 출력 주의

Interceptor 에서 body 에 담겨온 클라이언트의 request parameter 를 찍는 경우

실제 요청을 받아 로직을 수행하는 controller 나 service 에서 request parameter를 꺼내 쓸 수 없음.

stream은 1회성이므로 한번 열리면 다시 열어 쓸 수 없음.

--> 위 경우 filter 로 request parameter를 wrapping 하거나, 아예 AOP 로 로그를 찍어야 함.

 

9. DELETE 방식 호출시 주의사항

outputStream 사용하지 말것. 사용시 에러남.

참고 : https://developyo.tistory.com/8?category=688588

 

10. 이너클래스 사용시 주의사항

이너클래스는 바깥쪽에 있는 변수 중, final 로 선언된 변수만 사용이 가능.

 

11. 파일 업로드/다운로드 시 directory 권한 주의

파일을 로컬의 특정 경로 밑에 생성하여 특정 외부 서버에 ftp 로 전송하는 배치가 있을 때,

로컬의 특정 경로에 권한이 어떻게 되어있는지 필히 확인할 것.

만약 로컬의 특정 경로가 root 755 와 같이 되어있어, was계정이 w 가 불가 할 경우 에러발생.

 

12. mybatis version 낮은 경우 update 쿼리에서 selectkey 사용 불가

 

13. git hub repository 연동시 DB 정보를 비롯해 숨겨야 할 정보 유의하여 연동하기

gitignore 작성한 후 repository 연동해야 기록 자체가 남질 않음.

 

 

반응형

+ Recent posts