Проблема
Я пишу приложение с помощью SpringBoot, используя режим гибернации при записи данных в базу данных MySQL.Я получаю данные для сущности из формы HTML, используя тимилиф.Когда я сохраняю записи в базе данных, они отстают на 1 день, поэтому 2019-04-09 становится 2019-04-08.
То, что работало до сих пор
Единственное решение, которое я обнаружил до сих пор, - это изменить время, в течение которого моя система находится в UTC, но, очевидно, это будет работать по-другому для тех, кого япишу заявку на.Я видел много тем на эту тему в Интернете, но большую часть времени это исправлено с помощью хаков JVM, и я хотел бы сделать это надлежащим образом, если это возможно.
Что ставит меня в тупик
Я использую java.time.LocalDate, который предположительно не использует часовой пояс и сохраняет эту дату в столбце базы данных SQL с типом «Дата».Я попытался изменить часовой пояс своей базы данных на UTC, но это, похоже, не имеет значения.Единственное, что имеет значение, это изменение времени моего окна на UTC.
application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/boxbaza?serverTimezone=UTC
spring.datasource.username=box
spring.datasource.password=box
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.database-platform=org.hibernate.dialect.MySQL55Dialect
hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create
Hibernate entity
@DateTimeFormat(pattern = "yyyy-MM-dd")
@Column(name = "dataUmowy")
private LocalDate dataUmowy;
Контроллер
@SessionAttributes("ofwca")
@Controller
public class OfwcaController {
@Autowired
private OfwcaDao ofwcaDao;
@RequestMapping(value = "/panelOfwca/daneOfwca", method = RequestMethod.POST)
public String daneOfwca(Model model, @ModelAttribute("ofwca") Ofwca ofwca){
ofwcaDao.save(ofwca);
model.addAttribute("title", "Dane " + ofwca.getImie() + " " + ofwca.getNazwisko());
model.addAttribute("ofwca", ofwca);
return "panelOfwca/daneOfwca";
}
Объект доступа к данным
@Transactional
@Repository
public interface OfwcaDao extends CrudRepository<Ofwca, Integer> {
public List<Ofwca> findAll();
public Ofwca findByIdOfwca(Integer idOfwca);
}
HTML-форма
<form role="form" method="post" th:action="@{/panelOfwca/daneOfwca}" th:object="${ofwca}">
<div class="form-group col-xs-4">
<label for="dataUmowy">Data umowy</label>
<input type="date" id="dataUmowy" th:field="*{dataUmowy}" class="form-control">
</div>
</form>