Spring 启动以从属性文件加载包列表

Spring boot to load list of packages from properties file

我使用 Spring 引导程序设置项目,在启动时加载单个组件。每个单独的包都包含自己的数据源、进程等。我可以简单地使用它,它工作正常

@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 保险库中?我不确定如何检索它,是否可以在启动前检索属性?


编辑:

目前我试过这个:

@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"]

但它不起作用

你在正确的轨道上,但有几个小错误,请在 ymlproperties 文件

中按常用分隔指定包
app.packages = com.package1,com.package2,com.package3

然后在@ComponentScan注释中使用Spring表达式语言

@ComponentScan(basePackages = {"${app.packages}"})

这可以使用静态字符串常量来完成。我试过跟随它,它正在工作。

ScanBasePackageTestApplication 在 "test.packageOne, test.packageTwo" 包之外的第 3 个包中。然后我尝试将 test.packageOne 和 test.packageTwo 中的每个 class 自动装配到主包中的 class 中,它工作正常。

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

}

此时您可以管理PackagesScanMetaDataclass中所有待扫描的包列表。希望这有帮助。