Spring Boot笔记-自动配置(Spring Boot封装成jar被其他项目引用)

特点:

这里也就是自己写个Service注册到别人的SpringBoot项目中,然后别人来调用这个Service,这个Service,先读取自己的application.properties,再读取引入这个项目的application.properties,这里是覆盖式的。

 

程序运行如下:

CallJar调用了TestToolJar的一个Service。

运行截图如下:

这里的host,和port是在CallJar的application.properties中配置的:

 

封装TestToolJar,让其他SpringBoot项目调用

TestServiceAutoConfiguration.java接收application.properties的配置数据:

@ConfigurationProperties(prefix = "test-config")
public class TestServiceProperties {

    private String host;
    private int port;

    public String getHost() {
        return host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public int getPort() {
        return port;
    }

    public void setPort(int port) {
        this.port = port;
    }
}

这里maven要添加:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
     <optional>true</optional>
</dependency>

TestService.java要封装的service

public class TestService {

    private String host;
    private Integer port;

    public TestService(String host, Integer port) {

        this.host = host;
        this.port = port;
    }

    public void printAll(){

        System.out.println("host: " + this.host + " , port:" + port);
    }
}

这里要注意,这种方法不用去@Service,在调用这个jar包的spring boot进行调用操作。

TestServiceAutoConfiguration.java

@Configuration
@ConditionalOnClass(TestService.class)
@ConditionalOnProperty(name = "test-config.enabled", havingValue = "true", matchIfMissing = true)
@EnableConfigurationProperties(TestServiceProperties.class)
public class TestServiceAutoConfiguration {

    @Bean
    @ConditionalOnMissingBean
    public TestService testService(TestServiceProperties testServiceProperties){

        return new TestService(testServiceProperties.getHost(), testServiceProperties.getPort());
    }
}

自动注入配置

@ConditionalOnClass,存在TestService.class才装配;

@ConditionalOnProperty,配置文件存在test-config.enable=true才启动,允许此配置不存在

@ConditionalOnMissingBea,没有TestServiceAutoConfiguration这个类才进行装配。

下面是EnableTestService.java

这个类是给调用者提供的,调用者使用此注解,将spring boot的工具jar包,加载到自己的项目中

@Inherited
@Documented
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import(TestServiceAutoConfiguration.class)
public @interface EnableTestService {
}

再去掉maven中的打包插件:

打包:

随后是将jar导入到仓库:

mvn install:install-file -Dfile=TestToolJar-1.0.jar -DgroupId=cn.it1995 -DartifactId=testToolJar -Dversion=1.0.1 -Dpackaging=jar

下面是调用者

首先是maven引入jar包:

<dependency>
    <groupId>cn.it1995</groupId>
    <artifactId>testToolJar</artifactId>
    <version>1.0.1</version>
</dependency>

在application.properties中进行配置:

test-config.enable=true
test-config.host=114.114.114.114
test-config.port=9999

调用如下:

@SpringBootApplication
@EnableTestService
public class CallJarMain implements CommandLineRunner {

    @Autowired
    TestService testService;

    public static void main(String[] args) {

        SpringApplication.run(CallJarMain.class, args);
    }

    @Override
    public void run(String... args) throws Exception {

        testService.printAll();
    }
}

@EanleTestService,回去调用打包成jar的spring boot工具包中的EableTestService.java,如果application.properties中test-config.enable=true时,就会去注册TestService,否则就不会进行注册。

运行截图如下:

项目打包下载地址:

https://github.com/fengfanchen/Java/tree/master/SpringBootToolJarTest

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页