0、结合使用 spring 与 quartz ,注意版本关联,如 quartz 1.8.5 对应较低版本的 spring-context-support , 4.0.5,若引入较高版本的 spring,则 spring-context-support 较高版本也会被间接引入,此时需要在应用中强制使用较低版本的。以 gradle 为例,可以在子工程的 build.gradle 文件中写入:
compile("org.springframework:spring-context-support:4.0.5.RELEASE")。注意,如果 spring 是在父工程中引入的,则在父工程加入上段话是不起作用的,必须要在子工程中引入。
1.application.properties 默认配置没生效(BatchAtomImpl.java).
原因在于, springboot 会默认生成一个 PropertyPlaceholderConfigurer,而 xml 中又配置了一个,故会存在两个 configurer,而这两个 configurer 产生的时间不同,
使用 @Value 注入变量,所有 @Value,@Autowired 注解都是由 AutowiredAnnotationBeanPostProcessor 来实现处理的,由于实现了接口 InstantiationAwareBeanPostProcessor ,所以会自动在实例完后调用,该方法签名如下:
public PropertyValues postProcessPropertyValues(PropertyValues pvs, PropertyDescriptor[] pds, Object bean, String beanName),需要传入 PropertyValues,因为有两个
Property 加载器,可能传入的 PropertyValues 只包含某一个加载器的变量,于是就会导致注入错误。
2.一般来说,差异化有以下处理方法。
mvn : 定义 profile,结合 mvn 自带的 filter ,通过设置工程的 profile 属性,达到差异化目的
gradle : 通过传入任意的变量,在 gradle 脚本中作区分,这其实是 grovy 语言的能力.(注意父工程在将变量值传给子工程时,需要在父工程自定义属性: ext.prop,子工程才能使用 prop).
在子工程中,定制:
installDist
{
if('dev' == "${env}")
{
from ('src/main/resources/common/comm.properties') into 'conf'
...
}
}
springboot : 对于 springboot 工程来说,直接使用 profile 变量,传入 dev 则会使用 application-dev.properties 配置,否则使用默认的 application.properties.
3.目前的差异化处理方案,使用 gradle 传入变量在里面作打包处理,可以测试时打包的是 /src/test/resources 下的配置,而发布生产时,使用的是 /src/main/resources. 存在的问题是,在
eclipse 中直接运行时,使用的配置是 application (springboot 默认加载的配置文件),而这里面的变量是生产变量,故运行时会报错。
故解决的方法是,application.properties 中就存在测试时的运行配置,在它处再放置一个生产 application.properties 文件,生产打包时将它打包进去。
4.注意通过 springboot 默认加载的配置文件在非 bootstrap 启动程序的包及子包目录下的 bean 不会读取到此配置,原因在于,springboot 只会加载并配置那此包下的 bean. 不负责对 xml 定义
的其它包下的 bean 作配置注入。
5.框架层最好不要严格需要应用中定义某个名字的 bean, 某此配置文件. 若框架层严格上需要某个变量/bean,则可以采用注入的方式,不要直接去读某个文件.
目前框架层严格需要 gns.properties 和 rmb.properties 文件(实际上是 gns 和 rmb 组件需要)