我有一个Spring Boot服务,并且正在使用IntelliJ来运行它。我的application.properties
文件夹中有一个文件调用“ resources
”。我希望intelliJ读取该.properties
文件,该怎么办?我可以使用.properties文件中的属性的唯一方法是将它们直接添加到Environment VM Option。
我尝试做类似的事情
-Dspring.config.location:/src/main/resources/application.properties
,但无效。
文件夹结构:
Services
-src
-main
-resources
-application.properties
-target
-pom.xml
@Component
@Configuration
@EnableAutoConfiguration
@PropertySource({ "classpath:application.properties"})
@EntityScan(basePackages = "com.org")
public class AppConfig {
}
答案 0 :(得分:3)
对于Spring Boot,启动启动应用程序时不必传递任何选项。
Spring引导应用程序加载后,会自动检查属性文件是否存在于某些位置,包括src/main/resources
,src/main/resources/config
。
如果将属性文件保留在这些文件夹中,则该应用程序会自动选择文件并注册属性。因此,在您的AppConfig
中,您不需要@Component
,@EnableAutoConfiguration
,@PropertySource
和@EntityScan
,因为@Configuration
已经包含@Component
使@Value
可以正常工作。
我认为,当您在AppConfig
的构造函数中调用该属性时,可能会出现问题,因为在构造类时,@Value
尚未被注入。
如果要检查Spring是否注入了属性值,可以在应用程序类中进行如下测试
@SpringBootApplication
public class ApppropApplication {
@Autowired
private AppConfig appConfig;
public static void main(String[] args) {
SpringApplication.run(ApppropApplication.class, args);
}
@PostConstruct
public void init(){
System.out.println(appConfig.getTestProperty());
}
}
如果问题仍然存在,最好提供更多信息(错误日志和整个类结构)
希望这会有所帮助!快乐编码:)
答案 1 :(得分:0)
springboot项目包含属性文件的理想方法是在入门类中使用注释“ @PropertySource”导入。请重新检查您的入门班。它应该在下面包含这样的内容
@PropertySource({ "classpath:application-example.properties"})
@EntityScan(basePackages = "com.org")
public class YourProjectLauncher extends SpringBootServletInitializer {
@Value("${your.db.url}")
private transient String dataSourceUrl;
@Value("${your.db.username}")
private transient String userName;
@Value("${your.db.password}")
private transient String password;
@Value("${your.db.driver-class-name}")
private transient String driverClass;
public static void main(String... args) {
SpringApplication.run(YourProjectLauncher.class, args);
}
让我知道您是否已经这样做并且仍然面临问题。
此外,最好在问题中添加入门类,这样可以更轻松地分析您面临的问题。
注意-如果您已经完成此操作,请在问题中添加更多信息,将很乐意为您提供帮助。