Własne zmienne konfiguracyjne

Odpowiedz Nowy wątek
2019-07-16 21:22
0

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

Proszę vardzo:

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

    private int myvar1;

    // Getters and setters...
}

application.properties:

myprops.myvar1=3333

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

@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);
        };
    }
}

Pozostało 580 znaków

2019-07-16 21:33

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

    @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:

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

Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...
edytowany 3x, ostatnio: Shalom, 2019-07-16 21:38
Pokaż pozostałe 7 komentarzy
Z tego MyClassWithProps wywalić @Component bo @ConfigurationProperties już robi z tego beana i dodanie Component psuje sprawę bo nagle masz 2. - Shalom 2019-07-17 11:40
1 rozw. teraz dziala dzieki, a 2 juz nie wyrzuca bledu tylko zwraca defaultowe 0 zamiast 3333 z application.propeeties - Julian_ 2019-07-17 11:56
Bzdury. Sprawdziłem i oba działają bez zarzutu. Dajesz public CommandLineRunner foo(ApplicationContext ctx, MyClassWithProps mc, MyClassUsingProps mc2) { i oba te obiekty będą miały wartości property. - Shalom 2019-07-17 11:57
Aha, bo ja znowu przez new tworzylem. No to dziekiu - Julian_ 2019-07-17 11:58
I don't even... - Shalom 2019-07-17 11:59

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0