spring 零散知识

xiaoxiao2021-02-27  254

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 组件需要)

转载请注明原文地址: https://www.6miu.com/read-3792.html

最新回复(0)