【问题标题】:Referencing a value from a spring config从弹簧配置中引用一个值
【发布时间】:2015-05-09 00:51:12
【问题描述】:

首先是一些设置信息:

我有一个基于 Spring 的多租户应用程序。多租户支持库是我必须使用的内部开发工具。它的工作原理是在应用程序的 servlet 前面设置了一个拦截器。在请求命中 servlet 时,它会加载特定于租户的 spring 配置,用于在命中 servlet 的 url 上指定的租户所需的“东西”。

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

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

它后面不会有 bean 实现,它只是纯粹的,只有一个键/值,我可以在我的应用程序中按名称引用它。所以,大意是:

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

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

@Value{MyIdentifier.theId}
String theId;

让 Spring 意识到并注入价值。问题是,执行上述 Spring 之类的操作会抱怨 bean 没有实现。注意,没有为 bean 指定类。我想这样做的原因是每个租户配置文件都会包含这个 bean,但实际值会因租户而异。

在配置中是否可以使用其他类型来执行此操作?如果是这样,配置中必须包含哪些架构?

我猜我要么试图让 Spring 做一些不打算做的事情,要么,这太简单了,因为我盯着它太久了,我看不到它。无论如何,感谢您的帮助。

【问题讨论】:

标签: java spring multi-tenant


【解决方案1】:

如果不提供类实现,则无法在配置文件中创建 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>

并访问具体类中的属性:

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

【讨论】:

  • 好的,希望避免使用另一个属性文件,但看起来我必须这样做。
猜你喜欢
  • 1970-01-01
  • 2011-09-11
  • 2019-09-26
  • 2018-03-04
  • 1970-01-01
  • 1970-01-01
  • 2010-10-19
相关资源
最近更新 更多