spring - read property value from properties file in static field of class

后端 未结 6 1114
一向
一向 2021-02-06 12:07

I have one utility class where i have one method which requires username and password to connect other url. I need to kept that username in properties file so that i can change

相关标签:
6条回答
  • 2021-02-06 12:36

    In you Utility class you can have a setter method to set the properties and then you can use MethdInvokingFactoryBean.

    class Utility{
        static String username;
        static String password;
        public static setUserNameAndPassword(String username, String password){
            Utility.username = username;
            Utility.password = password;
        }
        //other stuff
    }
    
    <bean
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath*:/myservice_detaults.properties</value>
                <value>classpath*:/log4j.properties</value>
            </list>
        </property>
    </bean>
    
    <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
        <property name="staticMethod" value="foo.bar.Utility.setUserNameAndPassword"/>
        <property name="arguments">
            <list>
                <value>${username}</value>
                <value>${password}</value>
            </list>
       </property>
    </bean>
    
    0 讨论(0)
  • 2021-02-06 12:38

    Spring doesn't allow to inject values into non-final static fields but make your field private and it should works.

    0 讨论(0)
  • 2021-02-06 12:39

    Or just

    <bean id="constants" class="com.foo.constants.CommonConstants">
        <property name="username" value="${username}"/>
    </bean>
    
    0 讨论(0)
  • 2021-02-06 12:42

    Try this : Make your class a Component

    @Component
    public class UserXXXUtils {
        private static Integer trustXXXMask;
    
        @Value("${trustXXXMask}")
        public void setTrustXXXMask(Integer trustXXXMask) {
            UserXXXUtils.trustXXXMask = trustXXXMask;
        }
        //Access anywhere in the class
    }
    
    0 讨论(0)
  • 2021-02-06 12:55
    Read property value from properties file in static field of class using Java based spring configuration.
    Example :
    // The property file to store fields.
    user.properties
         username=Elijah Wood
         age=26
         language=English
    // This class holds the static values
    

    package org.javahive.propertyreader.example;

    public class UserDetails {
    
        static String username;
        static String age;
        static String language;
    
        public static void setUserValues(String username, String age, String language) {
            UserDetails.username = username;
            UserDetails.age = age;
            UserDetails.language = language;
        }
    }
    
    //Spring configuration class
    
    package org.javahive.propertyreader.example;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.beans.factory.config.MethodInvokingFactoryBean;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.PropertySource;
    import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
    
    @Configuration
    @ComponentScan(value = { "org.javahive.propertyreader.example" })
    @PropertySource("classpath:user.properties")
    public class PropertyReaderConfig {
    
        @Value("${user}")
        private String username;
    
        @Value("${age}")
        private String age;
    
        @Value("${language}")
        private String language;
    
        @Bean
        public static PropertySourcesPlaceholderConfigurer propertyConfigIn() {
            return new PropertySourcesPlaceholderConfigurer();
        }
    
        @Bean
        public MethodInvokingFactoryBean methodInvokingFactoryBean() {
            MethodInvokingFactoryBean mifb = new MethodInvokingFactoryBean();
            mifb.setStaticMethod("org.javahive.propertyreader.example.UserDetails.setUserValues");
            mifb.setArguments(new String[] { this.username, this.age, this.language });
            return mifb;
        }
    
        /**
         * @return the name
         */
        public String getName() {
            return username;
        }
    
        /**
         * @param name
         *            the name to set
         */
        public void setName(String name) {
            this.username = name;
        }
    
        /**
         * @return the age
         */
        public String getAge() {
            return age;
        }
    
        /**
         * @param age
         *            the age to set
         */
        public void setAge(String age) {
            this.age = age;
        }
    
        /**
         * @return the language
         */
        public String getLanguage() {
            return language;
        }
    
        /**
         * @param language
         *            the language to set
         */
        public void setLanguage(String language) {
            this.language = language;
        }
    
    }
    
    //The main class.
    

    package org.javahive.propertyreader.example;

    import org.springframework.context.ApplicationContext;
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    
    public class Main {
    
        public static void main(String[] args) {
            ApplicationContext context = new AnnotationConfigApplicationContext(PropertyReaderConfig.class);
            System.out.println("User Name : " + UserDetails.username);
            System.out.println("Age : " + UserDetails.age);
            System.out.println("Language : " + UserDetails.language);
        }
    }
    
    0 讨论(0)
  • 2021-02-06 12:58

    Or using the @Value over the non-static setter method for username eg.

    @Value("${app.username}")
    public void setUserName(String userName) {
        UtilityClass.userName = userName;
    }
    
    0 讨论(0)
提交回复
热议问题