繁体   English   中英

如何以编程方式更改 XML 中的值

[英]How to change a value in XML programmatically

我有一个弹簧批处理应用程序。 用于存储 spring 批处理作业元数据的数据库配置如下:

在 application-context.xml 中:

<!-- stored job-meta in database - H2 -->
    <bean id="jobRepository"
        class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean">
        <property name="dataSource" ref="dataSourceMetaData" />
        <property name="transactionManager" ref="transactionManager" />
        <property name="databaseType" value="h2" />    
    </bean>

在 database.xml 中:

<!-- configure H2 database connection -->
<bean id="dataSourceMetaData"
      class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="org.h2.Driver" />
    <property name="url" value="jdbc:h2:~/metaDataProd" />
</bean>

现在,应用程序可以在多个实例中在同一环境中运行,例如:一个实例用于生产,一个实例用于测试。 所以我必须使value="jdbc:h2:~/metaDataProd配置,以便两个实例不会访问相同的数据库。

如果我从配置文件生成值,我可以轻松地做到这一点。 但我想知道是否有任何自动的方法来做到这一点。 例如:当一个应用程序实例被启动时,一个日期value="jdbc:h2:~/metaData2Jul被附加到一个像这样value="jdbc:h2:~/metaData2Jul value="jdbc:h2:~/metaData4Jul编程盟友

您可以使用PropertySourcesPlaceholderConfigurer并从各种来源初始化值,如环境变量、外部属性文件等。 然后使用 ${propname} 占位符而不是硬编码值。

另见相关问题

如果您不需要区分实例而只是希望它们不同,那么SpEL有一个非常简单的方法。 以下任何一项都可以完成这项工作:

<property name="url" value="#{ 'jdbc:h2:~/metaData' + T(java.lang.System).nanoTime() }" />

或者

<property name="url" value="#{ 'jdbc:h2:~/metaData-' + T(java.util.UUID).randomUUID() }" />

或者

<property name="url" value="#{ 'jdbc:h2:~/metaData-' + (new java.text.SimpleDateFormat('ddmm_hh_mm_ss')).format(new java.util.Date()) }" />

如果您对 spring.xml 或应用程序没有任何控制权,但可以在启动前执行一些脚本,则可以在脚本中生成名称并替换 xml 中的 jdbc url 值(取决于脚本语言,SO 上有无穷无尽的解决方案) .

您可以为此指定 JNDI 属性并在 init uisng initialContext() 方法中加载该属性,如下所示:

new InitialContext(environment).lookup(myServiceJndiName);

在这种情况下,您可以为不同的环境指定不同的 jndi 值 test env 或 production env。

如何以编程方式更改 android 的值: tint 属性<bitmap xml< div><div id="text_translate"><p> 我是新来的,我需要你的帮助。 请告诉我如何从程序级别访问层列表 xml 结构并从程序级别动态更改 bitmap 的“色调”颜色。</p><pre> &lt;layer-list xmlns:android="http://schemas.android.com/apk/res/android"&gt; &lt;item android:id="@+id/bg_peper" android:right="65dp"&gt; &lt;bitmap android:gravity="top|left" android:tint="@color/red" android:src="@drawable/ic_favorite" /&gt; &lt;/item&gt; &lt;item.... &lt;/layer-list&gt;</pre></div></bitmap>

[英]How to programmatically change the value of the android: tint property in <bitmap xml

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM