2016-12-22 15 views
0

Springアプリケーションで環境を使用してapplication.propertiesファイルからデータを取得しようとしていますが、動作していません。私は環境によって正しくバインドされたデータを取得できません。私は、以下のようにローカル変数を使用すると、この作業を行うことができます:Springアプリケーションがプロパティソースからデータを取得できません

AppConfig.class now!

@Configuration 
@EnableTransactionManagement 
@EnableJpaRepositories("com.victommasi.eshop.dao") 
@PropertySource("classpath:application.properties") 
public class AppConfig { 

private static final String driverClass = "com.mysql.jdbc.Driver"; 
private static final String url = "jdbc:mysql://localhost/eshop"; 
private static final String username = "root"; 
private static final String password = "root"; 

private static final String dialect = "org.hibernate.dialect.MySQL5Dialect"; 
private static final String showSql = "true"; 
private static final String formatSql = "true"; 
private static final String hbm2dllAuto = "update"; 
private static final String packageToScan = "com.victommasi.eshop.model"; 


@Bean 
public DataSource dataSource(){ 
    DriverManagerDataSource dataSource = new DriverManagerDataSource(); 
    dataSource.setDriverClassName(driverClass); 
    dataSource.setUrl(url); 
    dataSource.setUsername(username); 
    dataSource.setPassword(password); 
    return dataSource; 
} 

private Properties hibernateProperties() { 
    Properties properties = new Properties(); 
    properties.put("hibernate.dialect", dialect); 
    properties.put("hibernate.show_sql", showSql); 
    properties.put("hibernate.format_sql", formatSql); 
    properties.put("hibernate.hbm2ddl.auto", hbm2dllAuto); 
    return properties;   
} 


@Bean 
public JpaTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) { 
    JpaTransactionManager transactionManager = new JpaTransactionManager();  
    transactionManager.setEntityManagerFactory(entityManagerFactory().getObject()); 
    return transactionManager; 

} 

@Bean 
public LocalContainerEntityManagerFactoryBean entityManagerFactory() { 
     LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean(); 
     entityManagerFactoryBean.setDataSource(dataSource()); 
     entityManagerFactoryBean.setPersistenceProvider(new HibernatePersistenceProvider()); 
     entityManagerFactoryBean.setPackagesToScan(packageToScan); 
     entityManagerFactoryBean.setJpaProperties(hibernateProperties()); 
     return entityManagerFactoryBean; 
} 

} 

AppConfig.class私は

@Configuration 
@EnableTransactionManagement 
@EnableJpaRepositories("com.victommasi.eshop.dao") 
@PropertySource("classpath:application.properties") 
public class AppConfig { 

@Autowired 
private Environment env; 


@Bean 
public DataSource dataSource(){ 
    DriverManagerDataSource dataSource = new DriverManagerDataSource(); 
    dataSource.setDriverClassName(env.getProperty("jdbc.driverClass")); 
    dataSource.setUrl(env.getProperty("jdbc.url")); 
    dataSource.setUsername(env.getProperty("jdbc.username")); 
    dataSource.setPassword(env.getProperty("jdbc.password")); 
    return dataSource; 
} 

private Properties hibernateProperties() { 
    Properties properties = new Properties(); 
    properties.put("hibernate.dialect", env.getProperty("hibernate.dialect")); 
    properties.put("hibernate.show_sql", env.getProperty("hibernate.show_sql")); 
    properties.put("hibernate.format_sql", env.getProperty("hibernate.format_sql")); 
    properties.put("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto")); 
    return properties;   
} 


@Bean 
public JpaTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) { 
    JpaTransactionManager transactionManager = new JpaTransactionManager();  
    transactionManager.setEntityManagerFactory(entityManagerFactory().getObject()); 
    return transactionManager; 

} 

@Bean 
public LocalContainerEntityManagerFactoryBean entityManagerFactory() { 
     LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean(); 
     entityManagerFactoryBean.setDataSource(dataSource()); 
     entityManagerFactoryBean.setPersistenceProvider(new HibernatePersistenceProvider()); 
     entityManagerFactoryBean.setPackagesToScan(env.getProperty("packages.to.scan")); 
     entityManagerFactoryBean.setJpaProperties(hibernateProperties()); 
     return entityManagerFactoryBean; 
} 

他のクラスたいよう:

WebConfig.class

@EnableWebMvc 
@Configuration 
@ComponentScan(basePackages = { "com.victommasi.eshop" }) 
public class WebConfig extends WebMvcConfigurerAdapter { 

@Override 
public void addResourceHandlers(ResourceHandlerRegistry registry) { 
    registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); 
} 

@Override 
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { 
    configurer.enable(); 
} 

@Bean 
public InternalResourceViewResolver internalResourceViewResolver() { 
    InternalResourceViewResolver resolver = new InternalResourceViewResolver(); 
    resolver.setPrefix("/WEB-INF/views/"); 
    resolver.setContentType("text/html;charset=UTF-8"); 
    resolver.setSuffix(".jsp"); 
    return resolver; 
} 

@Bean(name = "filterMultipartResolver") 
public CommonsMultipartResolver getMultipartResolver() { 
    CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(); 
    multipartResolver.setMaxUploadSize(1048576); 
    multipartResolver.setMaxInMemorySize(1048576); 
    return multipartResolver; 
} 

} 

WebAppInitializer.class

public class WebAppInitializer implements WebApplicationInitializer { 

@Override 
public void onStartup(ServletContext container) throws ServletException { 

    AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext(); 
    rootContext.register(WebConfig.class, AppConfig.class, SecurityConfig.class); 

    container.addListener(new ContextLoaderListener(rootContext)); 

    AnnotationConfigWebApplicationContext dispatcherServlet = new AnnotationConfigWebApplicationContext(); 
    dispatcherServlet.register(WebConfig.class); 

    ServletRegistration.Dynamic dispatcher = container.addServlet("dispatcher", new DispatcherServlet(dispatcherServlet)); 
    dispatcher.setLoadOnStartup(1); 
    dispatcher.addMapping("/"); 
} 

} 

私はそれが非常に簡単なようだと知っている、私もこのtutorialに従っているが、これを行うことはできません。

+0

_itが動作していないことを記載してください。 'getProperty'の呼び出しが' null'を返していますか? Springは例外をスローしていますか?何が起こると予想され、実際に何が起こるのですか? –

+0

申し訳ありませんがうまく説明できません。あなたのコメントを読んだ後、私はコンソールを見て、 'application.properties'ファイルのデータが空白にバインドされていることを確認し、バインディングが機能していなかったと考えています。 – vicTommasi

答えて

1

新しい@PropertySource注釈導入春3.1以来PropertySourcesPlaceholderConfigurer

が欠けているようにプロパティのソースを追加する 便利なメカニズムとして、私はそれをすべて通過しませんでしたが、それはそう環境。あなたは今@Value注釈が単純であると財産を注入し始めることができ、それに

@Configuration 
@PropertySource("classpath:application.properties") 
public class AppConfig { 
    @Bean 
    public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { 
     return new PropertySourcesPlaceholderConfigurer(); 
    } 
} 

: この注釈は、Javaベースの 構成や@Configuration注釈と組み合わせて使用​​する

@Value("${jdbc.url}") 
private String jdbcUrl; 

spring-bootを見てみると、上記のすべてのコード(あなたが共有しているすべてのコードを含む)が得られます。コードは無料です.

+0

ありがとうございますが、Springが推奨する環境を使用したいと思います。 – vicTommasi

+0

あなたはどちらの春を参照しているのか分かりませんが、 – iamiddy

0

私はコンソールを見て、「application.properties」ファイルのデータが環境によって空白のスペースでAppConfig.classにバインドされていることを確認しました。

スタックトレース:

Caused by: java.sql.SQLException: Access denied for user 'root  '@'localhost' 

私はそれが働いていなかった結合理由だったと仮定します。私のアプリケーションは今、私が望むように動作しています。ありがとう。

関連する問題