My maven project have three modules, web
, service
, common
Some parts of my project like this:
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
In web moudle Application.java
, I want to read contents from common
moudle application-errors.properties
.
Here is my ErrorCode.java
in 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;
}
}
Because I want to use this application-errors.properties
from web
module, So in web
moudle, in 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);
}
}
Now, I add EnableConfigurationProperties
to Application.java
which contains main
method, and I can get key and value from application-errors.properties
file, my question is :
If I want to invoke appliction-errors.propertie in other module like service, and service do not have a main method, what should I do ?
We can read properties file by using java Properties
class, but I want to use spring way.
Anything advice is welcome, thanks in advance.
properties” property file, as it was automatically built inside the Spring boot application when the project is initially created. We can create and maintain multiple property files within “Resources” module, where we will be able to define different types of property values in different files.
You can then place @EnableConfigurationProperties(classes = MyProperties. class) on your main application class or another @Configuration and then @Autowire your MyProperties class where its needed.
Instead of accessing application-error.properties, you can auto wire ErrorCode
class in your services in other modules (assuming the ErrorCode is present on the build classpath of those services).
First define your error message configuration component.
@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;
}
}
Auto wire the configuration component in service
@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
}
}
Enabling auto configuration in spring application
@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();
}
}
As per the Javadocs of EnableConfigurationProperties
,
{@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.
Thus, all beans defined with annotation ConfigurationProperties
are detected under application context and can be auto-wired in other services.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With