Преобразование наименования таблиц в слейве при принципе "мастер-слейв"

Я использую принцип "мастер-слейв". у меня есть:

@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") или написать кастомный преобразователь - всё работает но хотелось бы узнать способ проще.


Ответы (0 шт):