如何解决如果活动配置文件与regex关键字匹配,如何在Spring中有条件地启用类?
我有一个Spring Boot Controller,我想仅在某些配置文件处于活动状态时才启用它。但是,我不想使用硬编码来编码所有这些配置文件,而是想使用正则表达式或其他方法来实现此目的。
考虑这段代码
export const dataService = () => {
const [data,setData] = useState([
{
dataName:'name1',dataVisible:false,dataUrl:'http://localhost:8080/get_document/41gfdg-rewr-432fdsg'
},{
dataName:'name2',dataUrl:'http://localhost:8080/get_document/gfd6765-hf34-hgf34'
},{
dataName:'name3',dataUrl:'http://localhost:8080/get_document/hgfhbv-dsad-jy675j'
},{
dataName:'name4',dataUrl:'http://localhost:8080/get_document/lokg12-jg9d-hgf'
}])
const handleChange = (e) => {
setData(prevState => ({
...prevState,[e.target.name]: e.target.checked
}))
}
return(
<div>
{data.map((item,index) => {
return(
<Grid>
<Checkbox
name={item.dataName}
onChange={handleChange}
checked={item.dataVisible}
/>
<label>{item}</label>
</Grid>
)
})}
<div>
)
}
现在,我希望仅在活动配置文件属于以下内容时启用此控制器:@Controller
@Profile("#{'spring.profiles.active' matches 'eu'}") // this line is not working
public class HomeController{
// ... removed other code for brevity
}
等。 “ 等”是此处的关键字。我还有更多配置文件,它们中都包含dev1_eu,dev2_eu,dev3_eu,qa1_eu,qa2_eu,qa3_eu,prod1_eu,prod2_eu,prod3_eu,test1_eu,test2_eu
,并且我希望仅在此类eu
配置文件中启用上述控制器。现在,拥有这么多配置文件是否是一个好习惯,尚待争论,但是假设这不能更改(即无法减少配置文件的数量)。由于如果配置文件的数量较少,我可能会这样做:
*eu*
该怎么做呢?如果不是@Profile,那么还有其他更简便的方法可以实现这一目标吗?
解决方法
您可以尝试@ConditionalOnExpression
@ConditionalOnExpression(value = "#{ '${spring.profiles.active}' matches 'pattern' }")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。