Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

194
Views
Spring and Constants class from property file

I want to create Constants class with public static final fields, which I get from Properties file. The issue is that ClassLoader always null, and i can't get properties file InputStream.

I'm using Spring Java Configuration and I know about @PropertySource and @Value spring annotations, but I think old-style Constants class more readable in code.

@Autowired
Constants constants;//in every class that needs constant
//...
constants.getArticleLimit()

vs simple

Constants.ARTICLES_LIMIT //static var version

Here's my code:

package org.simpletest.utils

import org.apache.log4j.Logger;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class Constants {

    private static final Logger LOG = Logger.getLogger(Constants.class);

    public static final int ARTICLES_LIMIT;

    public static final String PROPERTIES_LOCATION = "constants.properties";

    static {
        Properties p = new Properties();

        //default values
        int articlesLimit = 10;

        Class<?> clazz = Constants.class.getClass(); 

        ClassLoader cl = clazz.getClassLoader();

        //try to load from properties file
        try(final InputStream is = cl.getResourceAsStream(PROPERTIES_LOCATION)){

            p.load(is);

            articlesLimit= Integer.parseInt(p.getProperty("articleslimit"));

        } catch (IOException e) {
            LOG.debug(String.format("Unable to load {0} properties file. Getting constants by default values.",PROPERTIES_LOCATION),e);
        }

        ARTICLES_LIMIT = articlesLimit;
    }
}
over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

After a bit of testing, this is the issue:

System.out.println(Constants.class.getClass());

This prints java.lang.Class which may not have been loaded by the classloader. This is because the class of a SomeClass.class is java.lang.class.

Remove the getClass() and the Classloader won't be null. No need for the clazz variable. This should be all you need to do:

ClassLoader cl = Constants.class.getClassLoader();
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!