簡介:使用SpringBoot開發應用,打包成jar包后,被別的項目引入時,需要注意直接引入不會對jar包里的配置類生效,需要如下配置才可以(五種方式任選一種)。
1. 配置@SpringBootApplication注解的掃描屬性
在引入第三方jar包的服務啟動類上添加@SpringBootApplication注解,並配置scanBasePackages等屬性,指定需要掃描的配置類;
package com.ruhuanxingyun.dcy.service.manage; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.transaction.annotation.EnableTransactionManagement; @EnableFeignClients @EnableTransactionManagement @MapperScan("com.ruhuanxingyun.dcy.service.manage.mapper") @SpringBootApplication(scanBasePackages = {"com.ruhuanxingyun.dcy.service.manage", "com.ruhuanxingyun.dcy.common.jwt.config", "com.ruhuanxingyun.dcy.common.tool.config"}) public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
2. 配置@ComponentScan注解的掃描屬性
在引入第三方jar包服務的啟動類上添加@ComponentScan注解,並配置basePackages等屬性,指定需要掃描的配置類;
3. 引用自定義注解開關
A. 第三方jar包里添加配置類;
package com.ruhuanxingyun.dcy.common.tool.config; import com.alibaba.fastjson.serializer.SerializerFeature; import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; /** * @description: FastJson 配置 * @author: ruphie * @date: Create in 2021/1/19 21:58 * @company: ruhuanxingyun */ @Configuration @ComponentScan(basePackageClasses = {FastJsonConfig.class}) public class FastJsonConfig { @Bean public HttpMessageConverter httpMessageConverter() { // 定義一個convert轉換消息的對象 FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter(); // FastJson配置 com.alibaba.fastjson.support.config.FastJsonConfig fastJsonConfig = new com.alibaba.fastjson.support.config.FastJsonConfig(); fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat); // 添加fastJson配置信息 fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig); fastJsonHttpMessageConverter.setDefaultCharset(StandardCharsets.UTF_8); // 設置MediaType List<MediaType> supportedMediaTypes = new ArrayList<>(); supportedMediaTypes.add(MediaType.APPLICATION_JSON); fastJsonHttpMessageConverter.setSupportedMediaTypes(supportedMediaTypes); return fastJsonHttpMessageConverter; } }
B. 第三方jar包里添加注解開關;
package com.ruhuanxingyun.dcy.common.tool.annotation; import com.ruhuanxingyun.dcy.common.tool.config.FastJsonConfig; import org.springframework.context.annotation.Import; import java.lang.annotation.*; /** * @description: FastJson配置注解 * @author: ruphie * @date: Create in 2021/3/8 22:12 * @company: ruhuanxingyun */ @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE}) @Documented @Import({FastJsonConfig.class}) public @interface EnableFastJson { }
C. 在引入第三方jar包的服務啟動類上添加注解開關。
package com.ruhuanxingyun.dcy.service.manage; import com.ruhuanxingyun.dcy.common.tool.annotation.EnableFastJson; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.transaction.annotation.EnableTransactionManagement; @EnableFastJson @EnableFeignClients @EnableTransactionManagement @MapperScan("com.ruhuanxingyun.dcy.service.manage.mapper") @SpringBootApplication(scanBasePackages = {"com.ruhuanxingyun.dcy.service.manage", "com.ruhuanxingyun.dcy.common.jwt.config"}) public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
4. 配置類配置@Bean注解
在引入第三方jar包的服務里添加配置類,同時使用@Bean配置需要使用的配置類;
package com.ruhuanxingyun.dcy.gateway.gateway.config; import com.ruhuanxingyun.dcy.common.jwt.config.TokenProvider; import com.ruhuanxingyun.dcy.common.tool.config.FastJsonConfig; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * @description: 公共 配置類 * @author: ruphie * @date: Create in 2021/3/6 21:37 * @company: ruhuanxingyun */ @Configuration public class CommonConfig { @Bean public TokenProvider tokenProvider() { return new TokenProvider(); } @Bean public FastJsonConfig fastJsonConfig() { return new FastJsonConfig(); } }
5. SpringBoot自動配置SPI機制
A. 在第三方jar包的項目resources目錄下新建META-INF目錄,並創建spring.factories文件;
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.ruhuanxingyun.dcy.common.tool.config.FastJsonConfig
B. org.springframework.boot.autoconfigure.EnableAutoConfiguration代表需要配置哪些類,\代表分行符,FastJsonConfig代表自動配置類,需寫入類全限定名。
6. SpringBoot自動配置原理
A. @EnableAutoConfiguration、@Configuration和@ConditionalOnClass三個注解構成自動配置的核心;
B. @EnableAutoConfiguration給容器導入META-INF/spring.factories里定義的自動配置類;
C. 篩選有效的自動配置類,每一個自動配置類結合對應的xxxProperties.java讀取配置文件進行自動配置功能。