アノテーションを充分に理解していないから、だと思いますが、
@Controller以外のクラスでjdbcTemplateを利用するとNullpointerExceptionが発生します。
【上手く行くソース:2クラスで実施】
@Controller
・SystemManageController.java
public class SystemManageController {
@Autowired private JdbcTemplate jdbcTemplate; @RequestMapping("/systemManage/logSearch") public String logsearch() { List<Map<String, Object>> list = jdbcTemplate.queryForList("select operationTime from SYS_OPERATION_LOG"); for (int i = 0;i < list.size();i++) { System.out.println("DB DEBUG:" + list.get(i).get("operationTime")); return "html/logSearch"; }
}
・DataSourceConfiguration .java
package jp.co.XXXX.service.operationService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@Configuration
@EnableTransactionManagement
public class DataSourceConfiguration {
@Bean
public DriverManagerDataSource dataSource() {
DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
driverManagerDataSource.setDriverClassName(com.mysql.jdbc.Driver.class.getName());
driverManagerDataSource.setUrl("jdbc:mysql://XXX.XXX.XXX.XXX:3306/DB名");
driverManagerDataSource.setUsername("ユーザ");
driverManagerDataSource.setPassword("パスワード");
return driverManagerDataSource;
}
@Bean
public DataSourceTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource());
}
@Bean
public JdbcTemplate jdbcTemplate() {
return new JdbcTemplate(dataSource());
}
}
【上手く行かないソース:3クラスで実施】
※DataSourceConfiguration .javaは同じ
・SystemManageController.java
public class SystemManageController {
@Autowired private JdbcTemplate jdbcTemplate; @RequestMapping("/systemManage/logSearch") public String logsearch() { OperationServiceDBControl facade = new OperationServiceDBControl(); facade.logInsert(); return "html/logSearch"; }
・**OperationServiceDBControl **
package jp.co.XXXX.service.operationService;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
@Component
public class OperationServiceDBControl {
@Autowired private JdbcTemplate jdbcTemplate; public void logInsert() { List<Map<String, Object>> list = jdbcTemplate.queryForList("select operationTime from SYS_OPERATION_LOG"); for (int i = 0;i < list.size();i++) { System.out.println("DB DEBUG:" + list.get(i).get("operationTime")); } }
}
上手く行かないソースの構造(DBの処理をさせるのはControllとは別のクラス)で、行いたいのですが、できますでしょうか?
出来る場合にはどうすればよいのでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/03/06 07:28
2017/03/07 08:13