2

我使用 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)        
    }
}

但目前,个别项目的数量越来越多。是否可以将要扫描的组件/包列表放在外部属性文件或弹簧库中?我不确定如何检索它,是否可以在启动之前检索属性?


编辑:

目前我试过这个:

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

但它不工作

4

2 回答 2

3

您在正确的轨道上,但有几个小错误,请通过常见的分隔符ymlproperties文件指定包

app.packages = com.package1,com.package2,com.package3

@ComponentScan然后在注解中使用 Spring Expression Language

@ComponentScan(basePackages = {"${app.packages}"})
于 2019-07-16T04:01:00.683 回答
0

这可以使用静态字符串常量来完成。我尝试关注并且它正在工作。

ScanBasePackageTestApplication 在“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 。希望这可以帮助。

于 2019-07-16T04:45:41.287 回答