java - 从 spring 配置引用值

标签 java spring multi-tenant

首先是一些设置信息:

我有一个基于 Multi-Tenancy spring 的应用程序。 Multi-Tenancy 支持库是我工作时必须使用的内部开发工具。它的工作原理是在应用程序的 servlet 前面设置一个拦截器。当请求击中 servlet 时,它会加载特定于租户的 spring 配置,以获取击中 servlet 的 url 上指定的租户所需的“内容”。

如上所述,以上只是一些背景知识。现在讨论问题:

我想要做的是在加载的租户配置中创建一个可用于在需要的地方注入(inject)的值。那么,有没有一种方法可以在 spring 配置中定义一个常量,然后在 java 代码中通过 @Value@Resource 引用它?

它后面不会有任何 bean 实现,它只是纯粹的键/值,我可以在应用程序中需要时通过名称引用它。因此,效果如下:

<bean name="MyIdentifier">
    <property name="theId" value="1001" />
</bean>

然后我可以做类似的事情吗?

@Value{MyIdentifier.theId}
String theId;

让 Spring 了解并注入(inject)该值。问题是,执行像上面这样的操作,Spring 会提示该 bean 没有实现。注意,没有为 bean 指定类。我想要这样做的原因是每个租户配置文件都将包含此 bean,但实际值会因租户而异。

配置中是否可以使用其他类型来执行此操作?如果是这样,配置中必须有哪些模式?

我猜我要么试图让 Spring 做一些不想要的事情,要么,这太简单了,我看不到它,因为我盯着它看太久了。不管怎样,谢谢你的帮助。

最佳答案

如果不提供类实现,则无法在配置文件中创建 bean 标记。如果你想注入(inject)字段的值,你必须转而使用属性文件。

创建如下属性文件:

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>

并访问具体类中的属性:

  @Value("${theId}")
    String theId;

关于java - 从 spring 配置引用值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30128434/

相关文章:

java - 是否可以自定义 Spring Cache 抽象使用的序列化?

sql - 包含序列的重复 postgresql 模式

java - 如何删除java中最后输入的值?

java - 找不到资源:/META-INF/BenchmarkList in Gradle project on Eclipse

java - 如何为 Jetty 的 Maven Cargo 插件指定 jetty-env.xml 文件?

java - 向 WSO2 Identity Server 注册 SAML 应用程序(无 SSO)

java - Spring Boot 1.3 使用模拟嵌套 Bean 进行测试

java - 自定义 Spring 范围?

java - Google appengine 为 Multi-Tenancy 应用程序中的所有请求创建延迟队列(/_ah/queue/__deferred__)

Laravel:在另一个数据库上运行迁移