我使用Spring Boot进行了项目设置,该项目在启动时会加载各个组件。每个单独的程序包都包含其自己的数据源,进程等。我可以简单地使用它,并且效果很好
@SpringBootApplication(scanBasePackages = {
"com.package1",
"com.package2",
"com.package3"
})
public class Application extends SpringBootServletInitializer{
public static void main(String[] args){
SpringApplication.run(Application.class,args)
}
}
但目前,个人项目的数量正在增加。是否可以将要扫描的组件/软件包列表放在外部属性文件或Spring Vault中?我不确定如何检索它,是否可以在启动前检索属性?
编辑:
目前,我尝试过此操作
@Import(AppConfig.class)
public class Application extends SpringBootServletInitializer{
public static void main(String[] args){
SpringApplication.run(Application.class,args)
}
}
@Configuration
@ComponentScan(basePackages = {$app.packages})
@EnableAutoConfiguration
public class AppConfig {
}
//in my properties file
app.packages = ["com.package1","com.package2","com.package3"]
但不起作用
答案 0 :(得分:4)
您步入正轨,但有一些小错误,请在yml
或properties
文件中以常见分隔符指定软件包
app.packages = com.package1,com.package2,com.package3
然后在@ComponentScan
批注中使用Spring Expression Language
@ComponentScan(basePackages = {"${app.packages}"})
答案 1 :(得分:0)
这可以使用静态字符串常量来完成。我尝试了以下操作,它正在起作用。
ScanBasePackageTestApplication位于第3个软件包中,而不是“ test.packageOne,test.packageTwo”软件包。然后,我尝试将每个test.packageOne和test.packageTwo的单个类自动连接到主包的类中,并且工作正常。
@Configuration
@SpringBootApplication(scanBasePackages = PackagesScanMetaData.PACKAGES_TO_SCAN)
public class ScanBasePackageTestApplication {
public static void main(String[] args) {
SpringApplication.run(ScanBasePackageTestApplication.class, args);
}
}
public class PackagesScanMetaData {
public static final String PACKAGES_TO_SCAN = "test.packageOne, test.packageTwo";
}
在这种情况下,您可以管理PackagesScanMetaData
类中的所有要扫描的软件包列表。希望这会有所帮助。