Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich habe im src/main/resources eine eigene Konfigurationsdatei myapp.properties:
Code:
basedirectory = test
Meine Spring Applikation sieht wie folgt aus:
Code:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import com.schuriko.myapp.config.AppConfig;
@SpringBootApplication
@EnableConfigurationProperties
@ConfigurationPropertiesScan
public class MyAppApplication {
public static void main(String[] args) {
SpringApplication.run(MyAppApplication.class, args);
AppConfig ac = new AppConfig();
System.out.println(ac.baseDirectory);
}
}
Und die AppConfig sieht wie folgt aus:
Code:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.PropertySource;
@PropertySource(value = { "classpath:myapp.properties" })
public class AppConfig {
@Value("${basedirectory}")
public String baseDirectory;
@Bean
public String getBaseDirectory() {
return baseDirectory;
}
}
Ich habe hierfür nur eine Getter-Funktion geschrieben, damit ich eine "Nur lese"-Funktion habe.
Die print - function der Main-Funktion gibt "null" aus. Und nicht wie erwartet "test"
Ich bin jetzt hier schon einige Stunden am rumtüffteln, habe mir etliche tutorials nochmal angeschaut. Aber irgendwie sehe ich momentan nur den Wald vor lauter Bäumen nicht mehr. Kann mir bitte jemand weiterhelfen
Du hast zwei Fehler in deinem Setup:
1. AppConfig ist noch keine Bean, somit würde es von Spring Boot zur Laufzeit auch nicht erkannt und als PropertySource verwendet werden. Annotiere AppConfig also mit `org.springframework.context.annotation.Configuration`.
2. Du instanziierst AppConfig auch direkt per `new`. Somit kann Spring auch kein Injection der Properties vornehmen. Das ist in etwa so, als würdest du eine Spring Bean mit @AutoWired Instanzvariablen definieren und diese direkt per `new` instanziieren. Das geht auch nicht. Du musst also den Kontext nach dem Bean fragen.
Insgesamt also:
Java:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
@Configuration
@PropertySource(value = { "classpath:myapp.properties" })
public class AppConfig {
@Value("${basedirectory}")
private String baseDirectory;
public String getBaseDirectory() {
return baseDirectory;
}
}
Da die AppConfig einfach nur eine PropertySource definiert, kannst du die Properties einfach per @Value benutzen:
Java:
@Service
public DeinService {
@Value("${baseDirectory}")
private String baseDirectory;
public void methodeDieBaseDirectoryVerwendet() {
// ... this.baseDirectory ...
}
}
EDIT:
Genausogut hättest du die Annotation `@PropertySource(value = { "classpath:myapp.properties" })` auch an deine Main-Klasse (die mit der SpringBootApplication Annotation) hängen können. Aber wahrscheinlich willst du ein POJO definieren, welches deine Properties per Getter zugreifbar macht, ohne, dass du immer die Werte per Value-Annotation überall rankleben musst.
Das geht mit der ConfigurationProperties Annotation. Schau mal hier: https://www.baeldung.com/spring-enable-config-properties bzw. hier: https://www.baeldung.com/configuration-properties-in-spring-boot