Własne zmienne konfiguracyjne

Własne zmienne konfiguracyjne
Julian_
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1703
0

Zaczytany w książce Spring in action fifth edition spróbowałem postawić swoje własne zmienne konfiguracyjne ze spring bootem .

Proszę vardzo:

Kopiuj
@Component
@ConfigurationProperties(prefix = "myprops")
public class MyClass {

    private int myvar1;

    // Getters and setters...
}

application.properties:

Kopiuj
myprops.myvar1=3333

MyClass.getMyvar1() powinien zwrócić 3333 a wciąż zwraca defaultowe 0.

Kopiuj
@EnableConfigurationProperties(MyClass.class)
@SpringBootApplication
public class Demo1Application {
    public static void main(String[] args) {
        SpringApplication.run(Demo1Application.class, args);
    }

    @Bean
    public CommandLineRunner foo(ApplicationContext ctx) {
        return args -> {
            MyClass mc = new MyClass();
            int x = mc.getMyvar1();
            System.out.println(x);
        };
    }
}
Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
5

new MyClass(); ;] srsly? I jak ci niby Spring ma tą klasę zinstrumentować? Magią? Szkoda słów. Skoro już masz przy tej klasie @Component to Spring zrobi z niej beana (jeśli pakiet jest w skanie) i bierzesz sobie ten zinstrumentowany obiekt przez @Inject

Kopiuj
    @Bean
    @Inject
    public CommandLineRunner foo(ApplicationContext ctx, MyClass mc) {
        return args -> {
            int x = mc.getMyvar1();
            System.out.println(x);
        };
    }

Ale odradzam takie machinacje bo potem coś takiego znaleźć w kodzie to dramat bo nawet string search nie pomaga. Wstrzykuj te propertiesy po ludzku:

Kopiuj
@Value("${myprops.myvar1}")
int myvar1;

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.