当前位置: 首页 > 面试题库 >

从数据库加载Spring PropertyPlaceholderConfigurer

花稳
2023-03-14
问题内容

是否可以使用Custom Spring
PropertyPlaceholderConfigurer从数据库加载属性?提供给自定义PropertyPlaceholderConfigurer的数据源是否有可能在类路径中使用特定的属性文件?

我无法通过以下链接找到满意的答案?

http://www.mkyong.com/spring/spring-propertyplaceholderconfigurer-example/


http://www.codeproject.com/Articles/28893/Loading-Application-Properties-
from-a-Database
PropertyPlaceholderConfigurer查找数据库值和使用属性文件作为后备


问题答案:

Spring Context XML

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <bean
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="ignoreUnresolvablePlaceholders" value="true"/>
        <property name="ignoreResourceNotFound" value="false"/>
        <property name="order" value="1" />
        <property name="locations">
            <list>
                <value>classpath:db.properties</value>
            </list>
        </property>
    </bean>

 <bean id="dataSourceimos" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass"><value>${imosdb.driver}</value></property>
        <property name="jdbcUrl"><value>${imosdb.url}</value></property>
        <property name="user"><value>${imosdb.username}</value></property>
        <property name="password"><value>${imosdb.password}</value></property>
        <property name="initialPoolSize"><value>${imosdb.initial_pool_size}</value></property>
        <property name="maxPoolSize"><value>${imosdb.max_pool_size}</value></property>
        <property name="minPoolSize"><value>${imosdb.min_pool_size}</value></property>
        <property name="acquireIncrement" value="1"/>
        <property name="acquireRetryAttempts" value="1"/>
        <property name="idleConnectionTestPeriod" value="30"/>
        <property name="preferredTestQuery" value="select 1 from dual"/>
        <property name="checkoutTimeout" value="5000"/>
        <property name="maxAdministrativeTaskTime" value="120"/>
        <property name="numHelperThreads" value="10"/>
    </bean>

    <bean
        class="com.ahmetk.property.DbPropertySourcesPlaceholderConfigurer">
        <property name="ignoreUnresolvablePlaceholders" value="true"/>
        <property name="ignoreResourceNotFound" value="true"/>
        <property name="order" value="2" />
        <property name="placeholderPrefix" value="${" />
        <property name="placeholderSuffix" value="}" />
        <property name="dataSourceName" value="dataSourceimos" />

        <property name="locations">
            <list>
                <value>classpath:static.properties</value>
                <value>file:static.properties</value>
            </list>
        </property>

    </bean>

    <context:component-scan base-package="com.mkyong.rest" />

    <bean id="transactionBo" class="com.mkyong.transaction.impl.TransactionBoImpl" />
    <bean id="cacheServiceInterface" class="com.ttech.tims.imos.data.cache.CacheServiceImpl" />
    <bean id="iCacheService" class="com.ttech.tims.imos.data.cache.impl.CacheService" />

</beans>

Java PlaceholderClass

import java.util.Properties;

import javax.sql.DataSource;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;


public class DbPropertySourcesPlaceholderConfigurer extends PropertyPlaceholderConfigurer 
{
   private static final String DEFAULT_DATASOURCENAME = "dataSource";
   private static final String DEFAULT_DBTABLENAME = "property";
   private static final String DEFAULT_DBKEYCOLUMNNAME = "key";
   private static final String DEFAULT_DBVALUECOLUMNNAME = "value";
   String dataSourceName;
   String dbTableName;
   String dbKeyColumnName;
   String dbValueColumnName;
   @Override
   public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException
   {

      DataSource dataSource = (DataSource) beanFactory.getBean(getDataSourceName());
     // DbProperties dbProps = new DbProperties(dataSource);
      final Properties dbProps = new Properties();
      dbProps.put("app.version", "v3");
      setProperties(dbProps);
      super.postProcessBeanFactory(beanFactory);
   }

   public String getDataSourceName() {
      return dataSourceName==null?DEFAULT_DATASOURCENAME:dataSourceName;
   }

   public void setDataSourceName(String dataSourceName) {
      this.dataSourceName = dataSourceName;
   }


}

特别感谢以下页面的作者。

http://ykchee.blogspot.com.tr/2012/09/spring-31-loading-properties-for-
xml.html

http://blog.javaforge.net/post/31720600427/configuring-spring-based-web-
application-from-
database

http://www.javacodegeeks.com/2012/11/spring-3-1-loading-properties-for-xml-
configuration-from-
database.html



 类似资料:
  • 是否可以用Camunda从数据库中加载BPMN XML,而不是在web应用程序中使用文件中的XML? 我们希望能够动态地添加新的工作流,而不是用定义部署新的WAR,这个想法是添加到数据库中,并通知webapp有新的定义。 谢谢,斯科特。

  • 我正在研究一个血液供应链的模拟,并创建和导入了一些表来管理各种代理群体的主数据,如血液处理中心、检测中心、医院等。这些表包含所述代理的名称和lat/lon坐标。 这些表都是MySQL数据库的一部分,我用它的接口连接到AnyLogic,正如我所说,导入了这些表。到目前为止还不错,但是,当我想为每个数据库条目创建代理群体并将代理的参数分配到表的各个字段时,AnyLogic不能将名称(在MySQL中为V

  • 问题内容: 带有以下源代码: 我可以用: 实例化该类,但我必须将此源文件()放在类路径中 我想从数据库动态加载此类(将源代码存储为或) 这可能吗 ? 问题答案: 假设您已经编译了该类,则可以创建一个,从数据库中加载该类。 如果数据库仅包含源代码,则必须首先对其进行编译-查看Java编译器API,了解如何在没有任何文件的情况下执行此操作。 请注意,只要类加载器处于活动状态,以这种方式加载的类就会保持

  • 我有一个示例API请求,它返回用户的WatchList列表。我想在用户加载watchlist屏幕时实现以下流程: 差异与 i.Same->一切都很好,因为数据已经显示给用户,什么都不做。 ii.Differs->将保存到本地存储,并将发送到下游。 到目前为止我做了什么? watchlist.kt localstore.kt(Android room) > 实现上述逻辑的最佳方法是什么? 我是否泄漏

  • 我有三个类具有类层次结构 > < Li > < p > < code > parent class . Java 具有用于此ChildClass1的属性,它还使用来自父类的一些常见属性 < code>ChildClass2扩展ParentClass 具有用于此子类2的属性,它还使用父类中的一些公共属性 所有这些属性都包含在两列表中 现在我不确定如何从Hibernate继承加载它们? 为愚蠢的问题道