从 spring 配置中引用一个值
Referencing a value from a spring config
首先是一些设置信息:
我有一个基于多租户 spring 的应用程序。多租户启用库是我必须使用的内部开发工具。它的工作原理是在应用程序的 servlet 前面设置了一个拦截器。当请求命中 servlet 时,它会为 "stuff" 加载特定于租户的 spring 配置,而 url 上指定的租户需要命中 servlet。
如前所述,以上只是一些背景知识。现在到 issue/question:
我想要做的是在加载的租户配置中创建一个值,我可以用它来注入我需要的地方。那么,有没有一种方法可以在 spring 配置中定义一个常量,然后通过 java 代码中的 @Value
或 @Resource
引用它?
它背后不会有 bean 实现,它只是一个纯粹的 key/value,我可以在我的应用程序中按名称在需要的地方引用它。所以,效果是:
<bean name="MyIdentifier">
<property name="theId" value="1001" />
</bean>
然后我可以做类似的事情吗?
@Value{MyIdentifier.theId}
String theId;
并让 Spring 了解并注入值。问题是做类似上面 Spring 的事情会抱怨没有针对该 bean 的实现。注意,没有为 bean 指定 class。我想这样做的原因是每个租户配置文件都将包含这个 bean,但实际值会因租户而异。
配置中是否有其他类型可用于执行此操作?如果是这样,配置中必须包含哪些架构?
我猜我要么试图让 Spring 做一些不想要的事情,要么,这太简单了,我看不到它,因为我盯着它看得太久了。无论如何,感谢您的帮助。
如果不提供 class 实现,则无法在配置文件中创建 bean 标记。如果你想注入字段的值,你必须去寻找属性文件。
创建 属性 文件如下:
application.properties
theId=1001
在您的配置中加载 属性 文件:
<bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
<property name="ignoreUnresolvablePlaceholders" value="true"/>
<property name="locations">
<list>
<value>classpath:application.properties</value>
</list>
</property>
</bean>
并在您的具体 class:
中访问 属性
@Value("${theId}")
String theId;
首先是一些设置信息:
我有一个基于多租户 spring 的应用程序。多租户启用库是我必须使用的内部开发工具。它的工作原理是在应用程序的 servlet 前面设置了一个拦截器。当请求命中 servlet 时,它会为 "stuff" 加载特定于租户的 spring 配置,而 url 上指定的租户需要命中 servlet。
如前所述,以上只是一些背景知识。现在到 issue/question:
我想要做的是在加载的租户配置中创建一个值,我可以用它来注入我需要的地方。那么,有没有一种方法可以在 spring 配置中定义一个常量,然后通过 java 代码中的 @Value
或 @Resource
引用它?
它背后不会有 bean 实现,它只是一个纯粹的 key/value,我可以在我的应用程序中按名称在需要的地方引用它。所以,效果是:
<bean name="MyIdentifier">
<property name="theId" value="1001" />
</bean>
然后我可以做类似的事情吗?
@Value{MyIdentifier.theId}
String theId;
并让 Spring 了解并注入值。问题是做类似上面 Spring 的事情会抱怨没有针对该 bean 的实现。注意,没有为 bean 指定 class。我想这样做的原因是每个租户配置文件都将包含这个 bean,但实际值会因租户而异。
配置中是否有其他类型可用于执行此操作?如果是这样,配置中必须包含哪些架构?
我猜我要么试图让 Spring 做一些不想要的事情,要么,这太简单了,我看不到它,因为我盯着它看得太久了。无论如何,感谢您的帮助。
如果不提供 class 实现,则无法在配置文件中创建 bean 标记。如果你想注入字段的值,你必须去寻找属性文件。
创建 属性 文件如下:
application.properties
theId=1001
在您的配置中加载 属性 文件:
<bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
<property name="ignoreUnresolvablePlaceholders" value="true"/>
<property name="locations">
<list>
<value>classpath:application.properties</value>
</list>
</property>
</bean>
并在您的具体 class:
中访问 属性 @Value("${theId}")
String theId;