Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Spring Boot应用程序中排除给定运行时配置文件中的包_Java_Spring_Spring Boot_Annotations_Profile - Fatal编程技术网

Java 如何在Spring Boot应用程序中排除给定运行时配置文件中的包

Java 如何在Spring Boot应用程序中排除给定运行时配置文件中的包,java,spring,spring-boot,annotations,profile,Java,Spring,Spring Boot,Annotations,Profile,在我的应用程序中,我有两个概要文件dev和prod,我可以使用org.springframework.context.annotation.Profile annotation排除bean: package com.example.prod; @Service @Profile("prod") public class MyService implements MyBaseService {} 问题是,我有几个bean是这样注释的,它们都在同一个包com.example.prod中。dev

在我的应用程序中,我有两个概要文件dev和prod,我可以使用org.springframework.context.annotation.Profile annotation排除bean:

package com.example.prod;

@Service
@Profile("prod")
public class MyService implements MyBaseService {}

问题是,我有几个bean是这样注释的,它们都在同一个包com.example.prod中。dev profile com.example.dev包也有类似的结构,将来我可能会有一些额外的配置文件。是否有可能一次排除整个包装?我尝试使用org.springframework.context.annotation.ComponentScan,但我无法根据实际配置文件添加排除过滤器,我想知道是否有简单的方法来解决我的问题。

您可以根据活动配置文件对某些包实施自定义禁用ComponentScan。一个启动示例是:

1实施过滤器。出于演示目的,我硬编码,如果活动概要文件是dev,它将排除由devExcludePackage属性配置的包。对于prod profile,它将排除由prodExcludePackage配置的包:

2配置application.properties以定义要为不同配置文件排除的包

devExcludePackage  = com.example.prod
prodExcludePackage = com.example.dev
3将此筛选器应用于@ComponentScan:


您可以根据活动配置文件实现自定义以禁用某些包的ComponentScan。一个启动示例是:

1实施过滤器。出于演示目的,我硬编码,如果活动概要文件是dev,它将排除由devExcludePackage属性配置的包。对于prod profile,它将排除由prodExcludePackage配置的包:

2配置application.properties以定义要为不同配置文件排除的包

devExcludePackage  = com.example.prod
prodExcludePackage = com.example.dev
3将此筛选器应用于@ComponentScan:


谢谢,这正是我想要的,也许不是非常优雅,但很管用。顺便说一句,devPackage和prodPackage应该有相反的值,我认为,您已经定义了要排除哪些包,因此devPackage应该排除com.example.prod和prodPackage=com.example.dev。但无论如何,谢谢。是的,你是对的,我只是换了一个更好的名字来命名这些房产:PThanks,这就是我想要的,也许不是超级优雅,但很管用。顺便说一句,devPackage和prodPackage应该有相反的值,我认为,您已经定义了要排除哪些包,因此devPackage应该排除com.example.prod和prodPackage=com.example.dev。但无论如何,谢谢。是的,你是对的,我只是换了一个更好的名字来命名这些属性:P
@SpringBootApplication
@ComponentScan(excludeFilters = @ComponentScan.Filter(
                type = FilterType.CUSTOM, classes = { ExcludePackageTypeFilter.class }))
public class Application {


}