2016年12月27日星期二

2016年12月18日星期日

Intellij中spring jpa entity "cannot resolve symbol"

see this link: http://stackoverflow.com/questions/12420996/intellij-idea-highlights-entity-class-names-with-cannot-resolve-symbol-in-jp

选择project structure中的facet,新建JPA,新增一个JPA Provider的persistence.xml,打开intellij左侧的persistence,右键选择new -> Persistence Unit,done。

2016年12月12日星期一

spring boot注入静态变量

private static String test;

@Value("${test}")
public void setXxx(String test) {
  Test.test = test;
}

遇到一个问题,如果这个static变量是要传给Test类的super方法调用:
public Test() {
  super(test);
}
执行顺序是先调用构造方法,后调用set方法,不能满足需求。

解决方法1:
public Test(@Value("${test}") String test) {
  super(test);
}

解决方法2:
把super父类中的用到test变量逻辑抽成了protected方法loadTest(test),在子类中调用,不再通过super传参调用:
public Test() {
  super();
}

@PostConstruct
public void init() {
  loadTest(test);
}

spring boot使用@PostConstruct初始化static变量

在类中定义private static变量,然后使用@PostConstruct:
@PostConstruct
public void init() {
}
init()中给static变量赋值

spring boot @Value注解值为空

对spring不熟的原因,使用@Value怎么改都是null。
原因是我在自己的类中(service层用到)使用了@Value,这并不起作用,然后我在类前面加了@Component注解,依然是null。
最后,我在service层@Autowired自动注入了该类,而不是自己new,问题解决了,折腾挺久...
总结一下,如果用Spring注解,不能自己new一个类。

spring boot启动问题

使用了@Configuration注解,启动时候报错:
Caused by: java.lang.IllegalArgumentException: No visible constructors in class ...

发现是我这个类的构造函数设为了private,改为protected后解决...

2016年12月3日星期六

spring boot中log4j打不出日志的问题

打开pom.xml的Dependency Analyzer,查看All Dependencies as Tree,搜索log4j,发现spring-boot-starter-web中引入了log4j-over-slf4j的依赖,并不是我们用的log4j,右键选择exclude将log4j-over-slf4j去掉,然后重新在pom.xml中添加log4j的依赖,问题解决。