我的maven项目有三个模块,web
,service
,common
我项目的某些部分是这样的:
demo-parent:
--web
--src
--main
--java
--Application.java
--resources
--application.properties
--application-mysql.properties
--service
--common
--src
--main
--java
--ErrorCode.java
--resources
--application-errors.properties
在网络模板Application.java
中,我想阅读common
moudle application-errors.properties
中的内容。
以下是ErrorCode.java
中的common
:
@Configuration
@EnableAutoConfiguration
@EnableConfigurationProperties
@ConfigurationProperties(locations = "classpath:application-errors.properties")
public class ErrorCode {
private int code;
private String message;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
因为我想在application-errors.properties
模块中使用此web
,所以web
moudle,Application.java
:
@SpringBootApplication
@PropertySources({
@PropertySource("application-mysql.properties"),
@PropertySource("application-errors.properties")
})
@EnableConfigurationProperties({ErrorCode.class})
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(Application.class);
application.run(args);
}
}
现在,我将EnableConfigurationProperties
添加到包含Application.java
方法的main
,我可以从application-errors.properties
文件中获取密钥和值,我的问题是:
如果我想在服务中其他模块中调用appliction-errors.propertie,而服务没有主方法,我该怎么办?
我们可以使用java Properties
类读取属性文件,但我想使用 spring方式。
欢迎任何建议,谢谢。
答案 0 :(得分:5)
您可以在其他模块中的服务中自动连接ErrorCode
类,而不是访问application-error.properties(假设这些服务的构建类路径中存在ErrorCode)。
首先定义您的错误消息配置组件。
@Configuration
@ConfigurationProperties(locations = "classpath:application-error.properties")
public class ErrorCode {
private int code;
private String message;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
自动连接服务中的配置组件
@Component
public class Service {
@Autowired
private ErrorCode errorCode;
public void accessErrorCode() {
System.out.println(errorCode.getCode()); //Print code property
System.out.println(errorCode.getMessage()); //print message property
}
}
在spring应用程序中启用自动配置
@SpringBootApplication
@EnableAutoConfiguration
@EnableConfigurationProperties
public class Application {
public static void main(String[] args) {
SpringApplication application = new SpringApplicationBuilder(Application.class).web(false).application();
ConfigurableApplicationContext context = application.run(args);
Service s = context.getBean(Service.class);
s.accessErrorCode();
}
}
根据EnableConfigurationProperties
的Javadoc,
{@ link ConfigurationProperties} bean可以用标准方式注册(for *使用{@link Bean @Bean}方法的示例),或者为方便起见,可以指定 *直接在这个注释上。
因此,使用注释ConfigurationProperties
定义的所有bean都在应用程序上下文中检测到,并且可以在其他服务中自动连接。