4 votes

Java jvm options override property inside property file

J'utilise java avec spring.

J'ai une application autonome dont le fichier de propriétés contient l'url de connexion à la base de données.

Pour une raison quelconque, si je veux remplacer une propriété, je vois que l'on peut remplacer une propriété en passant la propriété et sa valeur en la passant en tant qu'options jvm.

java -Dcom.abc.project.model.jdbc.ConnectionUrl=jdbc:jtds:sqlserver://abc-al01.abc.com/model_QA [executeablejar] myjavafile

Quelqu'un peut-il m'expliquer comment cela fonctionne ?

3voto

theMarceloR Points 674

Vous voulez charger des données liées à la base de données à partir d'un fichier de propriétés, mais vous voulez mettre en œuvre une fonctionnalité qui remplace ces données par des données de propriété système. Pourquoi ne pouvez-vous pas faire quelque chose comme ça ?

Properties prop = new Properties();

try {
    prop.load(new FileInputStream("config.properties"));

    String connUrl = prop.getProperty("com.abc.project.model.jdbc.ConnectionUrl");
    String theOtherConnUrl = System.getProperty("com.abc.project.model.jdbc.ConnectionUrl");

    if(theOtherConnUrl!=null){
        connUrl = theOtherConnUrl;
           ...

Je pense que le comportement de remplacement dépendra de la façon dont vous implémentez le code qui va récupérer ces données à partir du fichier de propriétés et de la propriété système, pourquoi ne pas laisser toutes les données liées à la base de données dans un seul fichier de propriétés (avec des données de connexion multiples séparées par des noms de paramètres différents, par ex, jdbc.sqlserver.host & jdbc.oracle.host) et utiliser un drapeau pour identifier les données que vous voulez utiliser (vous pouvez placer ce drapeau dans une propriété système, par exemple, -Dcom.abc.project.model.jdbc.db=sqlserver).

1voto

leccionesonline Points 61

En 1 ligne : String connUrl = System.getProperty("com.abc.project.model.jdbc.ConnectionUrl", prop.getProperty("com.abc.project.model.jdbc.ConnectionUrl")) ;

0voto

Evgeniy Dorofeev Points 52031

Voici un exemple de base

context.xml

<context:property-placeholder location="/test.properties" system-properties-mode="OVERRIDE"/> 
<bean class="Test">
    <property name="xxx" value="${xxx}" />
</bean>

test.properties

xxx=1

Test.java

public class Test {

    public void setXxx(String xxx) {
        System.out.println(xxx);
    }

    public static void main(String[] args) throws Exception {
        new ClassPathXmlApplicationContext("context.xml");
    }
}

Initialement, Test imprime la valeur de test.properties -. 1 . Mais si vous exécutez Test avec -Dxxx=2, il affiche 2 . C'est-à-dire que les propriétés du système remplacent les propriétés du fichier

0voto

user2427257 Points 1

Voyez ceci cela résout le problème avec la configuration de spring elle-même pas besoin de changer le code

Format des caractères de remplacement du printemps

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X