Spring Boot从属性文件加载软件包列表

时间:2019-07-16 03:15:27

标签: java spring-boot java-8 package spring-vault

我使用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"]

但不起作用

2 个答案:

答案 0 :(得分:4)

您步入正轨,但有一些小错误,请在ymlproperties文件中以常见分隔符指定软件包

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类中的所有要扫描的软件包列表。希望这会有所帮助。