L'environnement Autowired est null
j'ai un problème avec la connexion de l'environnement à mon projet du printemps. Dans cette classe
@Configuration
@ComponentScan(basePackages = "my.pack.offer.*")
@PropertySource("classpath:OfferService.properties")
public class PropertiesUtil {
@Autowired
private Environment environment;
@Bean
public String load(String propertyName)
{
return environment.getRequiredProperty(propertyName);
}
}
l'environnement est toujours null.
30
demandé sur
LeYar
2013-10-17 11:53:26
3 réponses
Autowiring arrive plus tard que load()
est appelé (pour certaines raisons).
une solution consiste à implémenter EnvironmentAware
et s'appuient sur des ressorts appel de setEnvironment()
méthode:
@Configuration
@ComponentScan(basePackages = "my.pack.offer.*")
@PropertySource("classpath:OfferService.properties")
public class PropertiesUtil implements EnvironmentAware {
private Environment environment;
@Override
public void setEnvironment(final Environment environment) {
this.environment = environment;
}
@Bean
public String load(String propertyName)
{
return environment.getRequiredProperty(propertyName);
}
}
24
répondu
Alex Shesterov
2015-01-06 15:08:27
Modifier @Autowired
@Resource
(à partir de javax.annotation) et l' public
e.g.:
@Configuration
@PropertySource("classpath:database.properties")
public class HibernateConfigurer {
@Resource
public Environment env;
@Bean
public DataSource dataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName(env.getProperty("database.driverClassName"));
dataSource.setUrl(env.getProperty("database.url"));
dataSource.setUsername(env.getProperty("database.username"));
dataSource.setPassword(env.getProperty("database.password"));
dataSource.setValidationQuery(env.getProperty("database.validationQuery"));
return dataSource;
}
}
et vous devez enregistrer votre classe de configurer dans WebApplicationInitializer de cette façon
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.register(ApplicationConfigurer.class); //ApplicationConfigurer imports HibernateConfigurer
ça marche pour moi! Vous pouvez cocher la case un projet de test j'ai fait.
13
répondu
Josue Montano
2014-07-29 17:54:31
Veuillez mettre ce code à l'intérieur de la classe où vous êtes en essayant de autowire l'Environnement
@Bean
public static PropertySourcesPlaceholderConfigurer propertyPlaceHolderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
Il a résolu mon problème. Ci-dessous je vous donne ma classe.
@Configuration
@EnableTransactionManagement
public class DatabaseConfig {
/**
* DataSource definition for database connection. Settings are read from the
* application.properties file (using the env object).
*/
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(env.getProperty("db.driver"));
dataSource.setUrl(env.getProperty("db.url"));
dataSource.setUsername(env.getProperty("db.username"));
dataSource.setPassword(env.getProperty("db.password"));
return dataSource;
}
@Bean
public static PropertySourcesPlaceholderConfigurer propertyPlaceHolderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
@Autowired
private Environment env;
}
0
répondu
Swathy
2017-09-20 11:00:08