@Profile注解类型于@Conditional,但是它仅针对当前运行的环境,我觉得这个东西在生产开发中使用的频率非常的低,几乎没有使用的空间。
但是我们目前的项目中有一个场景,可能会用到相关的技术,在我们的项目中,dev环境使用的数据源驱动并非PG数据库的的官方驱动,而是p6spy数据源启动,p6spy是一个非常强大的数据源,它可以拦截jdbc的所有SQL请求(我在实验中,并非所有的sql都可以被拦截)。但是上sit环境和prod环境时,我们需要使用正常的pg数据源。
从某种角度上讲,此时我们可以需要使用@Profile技术了。但是SpringBoot非常的强大,我们使用了两个application.yml文件,一个application-sit.yml、一个application-dev.yml文件,在每个文件中配置了不同的driverClass,从而就实现了在不同的环境中使用不同的数据源,感觉非常的方便。
如果该需求使用@Profile实现,我们会在代码中直接定义两个数据源,并直接硬编码给配置好,然后通过@Profile设置在不同的环境中装配不同的数据源。这么说来@Profile适用的场景是:组件的配置无法配置文件化(或者说没有精力去将一个组件的配置配置文件化,我们选择了在代码里通过JavaConfig进行配置)。
对@Profile的小结
经过上面的分析,我对@Profile的使用场景总结如下:当我们在进行bean的配置时,如果我们没有精力将组件的配置进行配置文件化,或者组件的配置本身也不是很好的支持配置文件化,我们可以考虑使用@Profile技术。
使用@Profile文件,我们需要公司级别的常量,用来表示各个公司中尝尝使用的各个环境,然后各个项目都需要遵守这个规范,使用已定义的Profile。