Spring Boot で ApplicationContext を初期化せずに application.properties の内容を取得する
このへんのソースを読むと、一応以下のように書けるっぽい?
なんか目的外使用っぽくてよくないですけど。
StandardEnvironment env = new StandardEnvironment(); new ConfigFileApplicationListener().postProcessEnvironment(env, new SpringApplication()); log.info("{}", env.getProperty("spring.datasource.url"));
ちなみにやりたかったことは、テストコードで ApplicationContext を利用せずに MyBatis の mapper を利用したかった。
StandardEnvironment env = new StandardEnvironment(); new ConfigFileApplicationListener().postProcessEnvironment(env, new SpringApplication()); DataSource dataSource = DataSourceBuilder.create() .type(Class.forName(env.getProperty("spring.datasource.type")).asSubclass(DataSource.class)) .url(env.getProperty("spring.datasource.url")) .username(env.getProperty("spring.datasource.username")) .password(env.getProperty("spring.datasource.password")) .driverClassName(env.getProperty("spring.datasource.driver-class-name")) .build(); Configuration mybatisConf = new Configuration(new Environment("test", new JdbcTransactionFactory(), dataSource)); mybatisConf.setMapUnderscoreToCamelCase(true); mybatisConf.addMapper(HogeHogeMapper.class); SqlSession sqlSession = new SqlSessionFactoryBuilder() .build(mybatisConf) .openSession(); try { HogeHogeMapper mapper = sqlSession.getMapper(HogeHogeMapper.class); // ... } finally { sqlSession.close(); }
でもここまで書いて結果的には利用しなかった。