笔者生产中,遇到
2017-05-16 08:47:22.020 WARN 1910 --- [localhost-startStop-1] o.s.c.a.ConfigurationClassPostProcessor : Cannot enhance @Configuration bean definition 'myBatisMapperScannerConfig' since its singleton instance has been created too early. The typical cause is a non-static @Bean method with a BeanDefinitionRegistryPostProcessor return type: Consider declaring such methods as 'static'. 2017-05-16 08:47:22.487 WARN 1910 --- [localhost-startStop-1] o.s.c.a.ConfigurationClassEnhancer : @Bean method Application.initOcc is non-static and returns an object assignable to Spring's BeanFactoryPostProcessor interface. This will result in a failure to process annotations such as @Autowired, @Resource and @PostConstruct within the method's declaring @Configuration class. Add the 'static' modifier to this method to avoid these container lifecycle issues; see @Bean javadoc for complete details.
MapperScannerConfigurer和PropertyPlaceholderConfigurer
之类的Bean必须要标记为static方法,以示优先加载。否则会给出警告。
代码:
import org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
*
* @author liuzh
* @since 2015-12-19 14:46
*/
@Configuration
//TODO 注意,由于MapperScannerConfigurer执行的比较早,所以必须有下面的注解
@AutoConfigureAfter(MybatisAutoConfiguration.class)
public class MyBatisMapperScannerConfig {
@Bean(name = "mapperScannerConfigurer")
public static MapperScannerConfigurer mapperScannerConfigurer() {
MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactorys");
mapperScannerConfigurer.setBasePackage("com.odianyun.swift.chae.alarm.mapper");
return mapperScannerConfigurer;
}
}
@Bean(name="occConfigure")
public static OccPropertyPlaceholderConfigurer initOcc(){
OccPropertyPlaceholderConfigurer opc = new OccPropertyPlaceholderConfigurer();
opc.setPool("chae");
return opc;
}