Ошибка при подключении к БД Oracle
По примеру https://javarush.ru/groups/posts/2251-znakomstvo-s-maven-spring-mysql-hibernate-i-pervoe-crud-prilozhenie-chastjh-3 пытаюсь написать простое веб приложение. Настраиваю подключение к БД Oracle, но выдает ошибку
Caused by: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1365) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1188) at org.apache.tomcat.dbcp.dbcp2.DriverFactory.createDriver(DriverFactory.java:49) ... 119 more
Как я понимаю он не может найти драйвер для подключения. драйвер jdbc версии ojdbc6.jar я добавил в проект. Вроде для моей версии Oracle 11g.2 она подходит.
Файл db.properties
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver jdbc.url=jdbc:oracle:thin:@10.10.5.120:1521:mydb jdbc.username=user1 jdbc.password=pass1
hibernate.dialect=org.hibernate.dialect.Oracle8iDialect hibernate.show_sql=true
Класс HibernateConfig
@Configuration
@ComponentScan(basePackages = "test")
@EnableTransactionManagement
@PropertySource(value = "classpath:db.properties")
public class HibernateConfig {
private Environment environment;
@Autowired
public void setEnvironment(Environment environment) {
this.environment = environment;
}
private Properties hibernateProperties() {
Properties properties = new Properties();
properties.put("hibernate.dialect", environment.getRequiredProperty("hibernate.dialect"));
properties.put("hibernate.show_sql", environment.getRequiredProperty("hibernate.show_sql"));
return properties;
}
@Bean
public DataSource dataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName(environment.getRequiredProperty("jdbc.driverClassName"));
dataSource.setUrl(environment.getRequiredProperty("jdbc.url"));
dataSource.setUsername(environment.getRequiredProperty("jdbc.username"));
dataSource.setPassword(environment.getRequiredProperty("jdbc.password"));
return dataSource;
}
@Bean
public LocalSessionFactoryBean sessionFactory() {
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(dataSource());
sessionFactory.setPackagesToScan("test.model");
sessionFactory.setHibernateProperties(hibernateProperties());
return sessionFactory;
}
@Bean
public HibernateTransactionManager transactionManager() {
HibernateTransactionManager transactionManager = new HibernateTransactionManager();
transactionManager.setSessionFactory(sessionFactory().getObject());
return transactionManager;
}
}
PatientController
@Controller
public class PatientController {
private PatientService patientService;
@Autowired
public void setPatientService(PatientService patientService) {
this.patientService = patientService;
}
@RequestMapping(value = "/", method = RequestMethod.GET)
public ModelAndView allPats() {
List<Patient> list = patientService.allPatients();
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("patients");
modelAndView.addObject("patientsList", list);
return modelAndView;
}
@RequestMapping(value = "/edit", method = RequestMethod.GET)
public ModelAndView editPatient() {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("editPatient");
return modelAndView;
}
}
Если по-старому без спрингов, hibernate и т.д. делать то работает вот так:
db.properties
db.host = jdbc:oracle:thin:@10.10.5.120:1521:mydb
db.user = user1
db.password = pass1
Класс для коннекта к БД
public class DBConnection {
public static Connection getConnection() throws SQLException, IOException {
Properties properties = new Properties();
try (InputStream in = Files.newInputStream(Paths.get("db.properties"))) {
properties.load(in);
}
String host = properties.getProperty("db.host");
String user = properties.getProperty("db.user");
String pass = properties.getProperty("db.password");
return DriverManager.getConnection(host, user, pass);
}
}
И дальше я могу без проблем работать с БД.
