【问题标题】:Using @Profile in spring boot在 Spring Boot 中使用 @Profile
【发布时间】:2014-10-15 03:59:56
【问题描述】:

我有 spring boot 应用程序 (1.1.5.RELEASE) 并通过配置属性spring.profiles.active=MyProfile启用我的配置文件

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

然后我有一个@Controller 使用如下:

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

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

那么在控制器上使用@Profile 注释与spring boot 不兼容吗?我应该使用其他方法吗?

编辑:这似乎是一个错误,好像我将 -Dspring.profiles.active=MyProfile 包含为控制器被实例化的 JVM 属性 :'(

Edit2:所以有趣的部分来了:

  • 如果您在application.properties 中定义spring.profiles.active,默认情况下会从类路径加载,那么它可以工作

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

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

谢谢!

【问题讨论】:

标签: java spring spring-mvc spring-boot


【解决方案1】:

我已经追踪到我认为是 Spring 中的一个错误。详情请见SPR-12111。

【讨论】:

    【解决方案2】:

    您绝对可以在 Spring Boot 中使用 @Profile 注释控制器,就像您在上面所做的那样。如果 MyProfile 处于活动状态,则 MyController 会被实例化。您确定“我的个人资料”是活动个人资料吗?你在设置 spring.profiles 属性吗?

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

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

    【讨论】:

    • 你在哪里设置spring.profiles.active?
    • @JanZyka,我在 application.properties 中设置它,没有尝试使用不同的名称。有趣
    • 如果您有空闲时间,能否重命名application.properties 并在您的顶级@Configuration 文件上使用@PropertySource("newName.properties")?
    • @JanZyka,我按照你的建议做了,它就像你描述的那样坏了。我什至替换了 application.properties 文件并添加了 spring.config.name=myotherproperties。另一个属性文件设置服务器端口,所以我知道它正在被拾取。但是一旦我将 spring.profiles 和 spring.profiles.active 移动到其他属性文件中,它就会停止工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    • 1970-01-01
    相关资源
    最近更新 更多