Trying to create a CRUD application using Spring Boot and PostgreSQL. At startup, it produces the following errors:

Error creating bean with name 'employeeDaoImpl' defined in file [D:\Vladislav Silyuk\Projects\simplewebapp\target\classes\com\way\dao\impl\EmployeeDaoImpl.class]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: 'dataSource' or 'jdbcTemplate' is required Caused by: java.lang.IllegalArgumentException: 'dataSource' or 'jdbcTemplate' is required 

AppConfiguration.java:

 @Configuration @ComponentScan("com.way.task") @PropertySource("classpath:application.properties") public class AppConfiguration { @Autowired Environment environment; private final String URL = "url"; private final String USER = "postgres"; //private final String DRIVER = "driver"; private final String PASSWORD = "50easY?"; @Bean DataSource dataSource() { DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource(); driverManagerDataSource.setUrl(environment.getProperty(URL)); driverManagerDataSource.setUsername(environment.getProperty(USER)); driverManagerDataSource.setPassword(environment.getProperty(PASSWORD)); //driverManagerDataSource.setDriverClassName(environment.getProperty(DRIVER)); return driverManagerDataSource; } } 

application.properties:

 server.servlet.context-path=/simplewebapp spring.datasource.url=jdbc:postgresql://localhost:5432/employeesdb spring.datasource.username=postgres spring.datasource.password=password spring.datasource.platform=postgresql 

EmployeeDaoImpl.java:

 public class EmployeeDaoImpl extends JdbcDaoSupport implements EmployeeDao { @Autowired private JdbcTemplate jdbcTemplate; @Override public List<Employee> getAllEmployees() { return jdbcTemplate.query("SELECT * FROM employees", (rs, rowNum) -> { Employee employee = new Employee(); employee.setEmployeeId(rs.getLong("employee_id")); employee.setFirstName(rs.getString("first_name")); employee.setLastName(rs.getString("last_name")); employee.setDepartmentId(rs.getLong("department_id")); employee.setJobTitle(rs.getString("job_title")); /*employee.setGender(rs.get("gender")); employee.setDateOfBirth(rs.getDate("date_of_birth"));*/ return employee; }); } @Override public void addEmployee(Employee employee) { jdbcTemplate.update("INSERT INTO employees(employee_id, first_name, last_name, department_id, job_title/*, gender, date_of_birth*/) VALUES (?, ?, ?, ?, ?/*, ?, ?*/)", employee.getEmployeeId(), employee.getFirstName(), employee.getLastName(), employee.getDepartmentId(), employee.getJobTitle()/*, employee.getGender(), employee.setDateOfBirth()*/); } @Override public void deleteEmployee(Long employeeId) { jdbcTemplate.update("DELETE FROM employees WHERE employee_id = ?", employeeId); } @Override public void updateEmployee(Employee employee) { jdbcTemplate.update("UPDATE employees SET first_name = ?, last_name = ?, department_id = ?, job_title = ?/*, gender = ?, date_of_birth = ?*/ WHERE employee_id = ?", employee.getFirstName(), employee.getLastName(), employee.getDepartmentId(), employee.getJobTitle()/*, employee.getGender(), employee.setDateOfBirth()*/); } } 

    2 answers 2

    Check the correctness of these lines.

     private final String DRIVER = "driver"; driverManagerDataSource.setDriverClassName(environment.getProperty(DRIVER)); spring.datasource.driver-class-name=org.postgresql.Driver 

    You are trying to stretch the property with the name DRIVER and you don’t have such a property

    • I do not know how stupid this decision is, but after deleting these lines, the number of errors has decreased - only errors remain that require a 'dataSource' or 'jdbcTemplate' - Vladislav

    Resolved by adding the following code to EmployeeDaoImpl.java:

     @Autowired private DataSource dataSource; @PostConstruct private void initialize() { setDataSource(dataSource); }