gpt4 book ai didi

java - spring boot 从不同的 maven 模块读取属性文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:51:30 26 4
gpt4 key购买 nike

我的maven项目有3个模块,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 模块 application-errors.properties 中读取内容。

这是我在 common 中的 ErrorCode.java:

@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;
}
}

因为我想在 web 模块中使用这个 application-errors.properties,所以在 web 模块中,在 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 添加到包含 main 方法的 Application.java 中,我可以从 application 中获取键和值-errors.properties 文件,我的问题是:

如果我想在服务等其他模块中调用appliction-errors.propertie,而服务没有main方法,我该怎么办?

我们可以使用 java Properties 类读取属性文件,但我想使用 spring 方式

欢迎任何建议,在此先感谢。

最佳答案

无需访问 application-error.properties,您可以在其他模块的服务中自动连接 ErrorCode 类(假设 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 的 Javadocs,

{@link ConfigurationProperties} beans can be registered in the standard way (for * example using {@link Bean @Bean} methods) or, for convenience, can be specified * directly on this annotation.

因此,所有使用注释 ConfigurationProperties 定义的 beans 都在应用程序上下文中被检测到,并且可以在其他服务中自动连接。

关于java - spring boot 从不同的 maven 模块读取属性文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33995035/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com