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
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 으로 처리되어 나타나는 현상
[관련 자료]
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 |
참고:
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 확인 : 상대경로로 지정된 패키징 경로가 존재.. 해당 부분 제거 후 문제 해결
VMware 우분투 설치 오류 : This host supports AMD-V, but AMD-V is diabled (0) | 2020.09.09 |
---|---|
[에러노트] ClusterManager: detected 1 failed or restarted instances : 쿼츠 클러스터링 관련 에러 (0) | 2020.05.12 |
Mysql Function 생성시 에러 (0) | 2020.03.11 |
[에러노트] Spring Batch : Unknown column 'E.JOB_CONFIGURATION_LOCATION' in 'field list' (0) | 2020.03.09 |
error in your SQL Syntax : OPTION_SQL_SELECT_LIMIT (0) | 2020.02.12 |
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
[에러노트] 컴파일은 성공했으나 실행/Junit테스트시 NoDefClassFoundError가 발생하는 현상 : compiled successfully but NoDefClassFoundError occurred at running/junit Testing (0) | 2020.03.26 |
---|---|
Mysql Function 생성시 에러 (0) | 2020.03.11 |
error in your SQL Syntax : OPTION_SQL_SELECT_LIMIT (0) | 2020.02.12 |
개발 주의사항 모음 (0) | 2019.10.24 |
vm 에 Ubuntu 설치시 vmwgfx 에러 (0) | 2019.06.04 |
현상, 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>
[에러노트] 컴파일은 성공했으나 실행/Junit테스트시 NoDefClassFoundError가 발생하는 현상 : compiled successfully but NoDefClassFoundError occurred at running/junit Testing (0) | 2020.03.26 |
---|---|
Mysql Function 생성시 에러 (0) | 2020.03.11 |
[에러노트] Spring Batch : Unknown column 'E.JOB_CONFIGURATION_LOCATION' in 'field list' (0) | 2020.03.09 |
개발 주의사항 모음 (0) | 2019.10.24 |
vm 에 Ubuntu 설치시 vmwgfx 에러 (0) | 2019.06.04 |
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
오버로딩은 컴파일 단계에서.
오버라이딩은 런타임 단계에서.
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 만 사용할 것
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 연동해야 기록 자체가 남질 않음.