事象
herokuにデプロイしようとしたら以下のようなエラーが出た。
remote: > Task :compileJava FAILED
remote: /tmp/build_286ffed9/src/main/java/com/example/webapp/service/impl/EmployeesManagementServiceImpl.java:25: error: package com.mysql.cj.jdbc.exceptions does not exist
remote: import com.mysql.cj.jdbc.exceptions.MysqlDataTruncation;
以下のコードで使用しているMysqlDataTruncationが原因らしい。
@Override
public void updateEmployee(EmployeeForm employeeForm) throws DuplicateEmployeeException, TooLongDataException {
Employee employee = EmployeeHelper.convertEmployee(employeeForm);
try {
employeesManagementMapper.update(employee);
} catch (DataIntegrityViolationException e) {
if (e.getCause().getClass().equals(SQLIntegrityConstraintViolationException.class)) {
throw new DuplicateEmployeeException("従業員名が重複しています");
}
if (e.getCause().getClass().equals(MysqlDataTruncation.class)) {
throw new TooLongDataException(e.getCause().getMessage());
}
}
}
「package com.mysql.cj.jdbc.exceptions does not exist」、つまりパッケージが存在していないということらしいのだが、普通にローカル環境ではコンパイルして起動できた。
原因
Heroku上にはMySQLのJDBC Driverが存在していないため。
対処
gradleの依存に以下を追加
implementation 'mysql:mysql-connector-java:8.0.33'
これでデプロイできた。