我有两个豆子,都实现了邮件功能。其中一个只能在应用服务器上部署时才能使用,另一个则用于测试。
我们为每个开发者和环境设置了配置文件。我想在实际进行测试时仅连接测试豆子。当不进行测试时应该使用另一个豆子。如何实现这一点?
解决方案:
使用“默认值”,我在某个地方看到过,但对于像“dev”这样的配置文件似乎没有回退到“默认值”。
我们为每个开发者和环境设置了配置文件。我想在实际进行测试时仅连接测试豆子。当不进行测试时应该使用另一个豆子。如何实现这一点?
@Component
@Profile("localtest")
public class OfflineMail implements Mailing {}
解决方案:
使用“默认值”,我在某个地方看到过,但对于像“dev”这样的配置文件似乎没有回退到“默认值”。
@Component
@Profile("default")
public class OnlineMail implements Mailing {}
-> 找不到需要注入的bean异常。
不指定配置文件:
@Component
public class OnlineMail implements Mailing {}
-> 运行“localtest”配置文件时会抛出唯一的异常。
添加所有配置文件:
@Component
@Profile("prod")
@Profile("integration")
@Profile("test")
@Profile("dev1")
@Profile("dev2")
@Profile("dev3")
...
public class OnlineMail implements Mailing {}
这实际上是有效的,但我们的开发人员没有编号,他们使用“dev<WindowsLogin>”,添加配置文件可能适用于一个bean,但如果将其用于多个bean,则会遇到麻烦,因为这肯定会变得很丑陋。
使用类似于@Profile(“!localtest”)的东西似乎也不起作用。
有没有人知道更好的方法来获得“默认情况下进行连接,如果没有找到特定的bean”?
@Profile
,@Component
必须是默认的bean,如果没有进行任何装配。您是否尝试通过为组件设置名称来避免唯一异常?我的意思是,有@Profile("localtest")
和没有它的@Component("mail")
。 - n1ckolas