应用场景:B服务需要做成一个starter 供A 服务调用
非yml版的意思是,属性配置在B服务中,网上的很多帖子属性配置都是在A服务中
B 服务的pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo-spring-boot-starter</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>2.3.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>2.3.3.RELEASE</version>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
属性类
import java.util.HashMap;
import java.util.Map;
public class Register {
public Map<String,String> services = new HashMap<String, String>();
public void setServices() {
services.put("aa","21324");
services.put("bb","hello path");
}
public Map<String, String> getServices() {
return services;
}
}
服务类
import java.util.Map;
public class RegisterService {
private Register register;
public void setRegister(Register register) {
this.register = register;
}
/**
* 获取全部服务
* @return map<服务名,服务地址>
*/
public Map<String,String> getServices(){
return register.getServices();
}
/**
* 根据服务名获取服务地址
* @param serviceName 服务名
* @return 服务地址
*/
public String getService(String serviceName){
return register.getServices().get(serviceName);
}
}
配置类
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@ConditionalOnClass(Register.class)
public class RegisterConfig {
@Bean
public RegisterService registerService(){
RegisterService registerService = new RegisterService();
Register register = new Register();
register.setServices();
registerService.setRegister(register);
return registerService;
}
}
然后
在resources/META-INF/下创建spring.factories文件
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.register.RegisterConfig
mvn clean install
把生成的jar 引入到A服务中,A服务中测试代码
import com.example.register.RegisterService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@Autowired
private RegisterService registerService;
@GetMapping("/test")
public String test(){
return registerService.getService("aa");
}
}
输出结果