在spring boot中使用@Profile

时间:2014-08-21 13:32:21

标签: java spring spring-mvc spring-boot

我有春季启动应用程序( 1.1.5.RELEASE )并通过配置主题spring.profiles.active=MyProfile启用我的个人资料

配置文件被正确激活,我可以通过正在创建的配置文件中的bean看到该配置文件。

然后我使用@Controller如下:

@Controller
@RequestMapping("/someUrl")
@Profile("MyProfile")
public class MyController {
...
}

未实例化此控制器,并且未映射控制器中使用的URL。在同一个包中,我有另一个不受@Profile限制的控制器,这些控制器会按预期进行实例化和映射。

那么在控制器上使用@Profile注释是否与弹簧启动不兼容?我应该使用其他方法吗?

编辑:这似乎是一个错误,好像我将-Dspring.profiles.active=MyProfile作为JVM属性包含在控制器实例化:&#39;( < / p>

Edit2:所以有趣的是:

  • 如果您在spring.profiles.active中定义application.properties,默认情况下从类路径中加载它{

  • 将文件重命名为test.properties并通过@PropertySource("classpath:test.properties")包含该文件时,它将停止工作。会引发反对它的错误。

编辑3:按照承诺:https://github.com/spring-projects/spring-boot/issues/1417

谢谢!

2 个答案:

答案 0 :(得分:4)

我已将此追踪到我认为是春天的错误。有关详细信息,请参阅SPR-12111

答案 1 :(得分:1)

你可以在Spring Boot中使用@Profile注释一个控制器,就像你上面做的那样。如果MyProfile处于活动状态,MyController将被实例化。你确定&#34; MyProfile&#34;是活跃的个人资料?你在设置spring.profiles属性吗?

http://docs.spring.io/spring/docs/3.2.x/javadoc-api/org/springframework/context/annotation/Profile.html @Profile注释可以通过以下任何方式使用:

作为直接或间接使用@Component注释的任何类的类型级注释,包括@Configuration类 作为元注释,用于编写自定义构造型注释