Преобразование наименования таблиц в слейве при принципе "мастер-слейв"
Я использую принцип "мастер-слейв". у меня есть:
@Entity
@Data
@EqualsAndHashCode(callSuper = true)
public class AlertMessage extends BasicEntityAuto {
private String nickname;
private AlertType alertType;
@CreationTimestamp
@Temporal(TemporalType.TIMESTAMP)
private Date createdDate;
}
, в пом есть зависимости:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>3.2.6</version>
</dependency>
<dependency>
<groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-core</artifactId>
<version>7.0.0.Beta1</version>
</dependency>
в проперти:
server.port=8108
spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
spring.jpa.hibernate.naming.implicit-strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
spring.jpa.hibernate.dialect=org.hibernate.dialect.MariaDBDialect
spring.jpa.hibernate.ddl-auto=update
spring.datasource.master.jdbcurl=jdbc:mariadb://127.0.0.1:3309/test
spring.datasource.master.username=root
spring.datasource.master.password=root
spring.datasource.master.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.slave1.jdbcurl=jdbc:mariadb://127.0.0.1:3310/test
spring.datasource.slave1.username=root
spring.datasource.slave1.password=root
spring.datasource.slave1.driver-class-name=org.mariadb.jdbc.Driver
докер:
services:
master:
restart: always
image: mariadb:latest
container_name: mariadb_master
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: test
MYSQL_USER: root
MYSQL_PASSWORD: root
volumes:
- ./master-data:/var/lib/mysql
- ./master-conf:/etc/mysql/conf.d
ports:
- "3309:3306"
command: >
--server-id=1
--log-bin=mysql-bin
--binlog-do-db=test
--binlog-format=ROW
slave:
restart: always
image: mariadb:latest
container_name: mariadb_slave
environment:
MYSQL_ROOT_PASSWORD: root
volumes:
- ./slave-data:/var/lib/mysql
- ./slave-conf:/etc/mysql/conf.d
- ./script:/scripts
ports:
- "3310:3306"
depends_on:
- master
command: >
--server-id=2
--relay-log=relay-bin
--log-bin=mysql-bin
--skip-slave-start=0
--scripts/script.sh
при запуске проекта я получаю: java.sql.SQLSyntaxErrorException: (conn=151) Table 'test.AlertMessage' doesn't exist
почему ищется таблица AlertMessage, а не alert_message?
указывать @Table(name = "alert_message")
не вариант. также я не хочу писать собственный класс преобразования (типа: SnakeCaseNamingStrategy implements PhysicalNamingStrategy).
каких настроек у меня не хватает для преобразования CamelCase в snake_case?
эта проблема происходит именно со слейвом. потому что если я к докеру слейва в command добавлю флаг "--lower_case_table_names=1"
, то таблицы начинают искаться уже так 'test.alertmessage'.
как по-другому указать наименование именно для слейва?
если указать @Table(name = "alert_message")
или написать кастомный преобразователь - всё работает но хотелось бы узнать способ проще.