How to dynamically change schema in spring boot Entities?

Ajith Deivam

I am using spring boot(1.5.9 version) and MySQL,hibernate .In MySQL i am having two or more different schema ,Table1 present in schema1 and Table2 present in schema2,in my spring boot application.properties i have connected mysql schema1 database,i need to store the values in schema2.table2 in same port(3356).how to dynamically change the schema in Entity.

application.properties

spring.datasource.url=jdbc:mysql://localhost:3356/schema1
spring.datasource.username=root
spring.datasource.password=12345
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

Entity:

@Entity
@Table(name = "table2", schema = "schema2")
public class Company implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "CompanyID")
    private Integer id;

    @Column(name = "CompanyName")
    private String companyname;
}

Error:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'schema1.table2' doesn't exist
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_151]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_151]
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_151]
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_151]
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) ~[mysql-connector-java-5.1.44.jar:5.1.44]
    at com.mysql.jdbc.Util.getInstance(Util.java:408) ~[mysql-connector-java-5.1.44.jar:5.1.44]
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:943) ~[mysql-connector-java-5.1.44.jar:5.1.44]
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973) ~[mysql-connector-java-5.1.44.jar:5.1.44]
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909) ~[mysql-connector-java-5.1.44.jar:5.1.44]
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527) ~[mysql-connector-java-5.1.44.jar:5.1.44]
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680) ~[mysql-connector-java-5.1.44.jar:5.1.44]
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2487) ~[mysql-connector-java-5.1.44.jar:5.1.44]
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858) ~[mysql-connector-java-5.1.44.jar:5.1.44]
    at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2079) ~[mysql-connector-java-5.1.44.jar:5.1.44]
    at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2013) ~[mysql-connector-java-5.1.44.jar:5.1.44]
    at com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5104) ~[mysql-connector-java-5.1.44.jar:5.1.44]
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1998) ~[mysql-connector-java-5.1.44.jar:5.1.44]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_151]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_151]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_151]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_151]
    at org.apache.tomcat.jdbc.pool.StatementFacade$StatementProxy.invoke(StatementFacade.java:114) ~[tomcat-jdbc-8.5.23.jar:na]
    at com.sun.proxy.$Proxy106.executeUpdate(Unknown Source) ~[na:na]
Alejandro

You need to define 2 different configuration:

spring.schema1.datasource.url=jdbc:mysql://localhost:3356/schema1
spring.schema1.datasource.username=root
spring.schema1.datasource.password=12345
spring.schema1.datasource.driver-class-name=com.mysql.jdbc.Driver

spring.schema2.datasource.url=jdbc:mysql://localhost:3356/schema2
spring.schema2.datasource.username=root
spring.schema2.datasource.password=12345
spring.schema2.datasource.driver-class-name=com.mysql.jdbc.Driver

And after that, you need to make the config for each datasource:

package yorPackage;

import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceContext;
import javax.sql.DataSource;

import org.hibernate.jpa.HibernatePersistenceProvider;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@Configuration
@EnableTransactionManagement
@EnableAutoConfiguration
@EntityScan(basePackages = "yorPackage.entity")
@EnableJpaRepositories(transactionManagerRef = "schema1TransactionManager", entityManagerFactoryRef = "schema1EntityManagerFactory", basePackages = "yorPackage.dao")
public class Schema1DbConfig {

    @Bean(name = "schema1DataSource")
    @Primary
    @ConfigurationProperties(prefix = "spring.schema1.datasource")
    public DataSource schema1DataSource() {
        return DataSourceBuilder.create().build();
    }

    @PersistenceContext(unitName = "schema1")
    @Bean(name = "schema1EntityManagerFactory")
    @Primary
    public LocalContainerEntityManagerFactoryBean schema1EntityManagerFactory() {
        LocalContainerEntityManagerFactoryBean emf = new LocalContainerEntityManagerFactoryBean();
        emf.setDataSource(schema1DataSource());
        emf.setPersistenceUnitName("schema1");
        emf.setPersistenceProvider(new HibernatePersistenceProvider());
        emf.setPackagesToScan("yorPackage");
        return emf;
    }

    @Bean(name = "schema1TransactionManager")
    @Primary
    public JpaTransactionManager schema1TransactionManager(@Qualifier("schema1EntityManagerFactory") final EntityManagerFactory emf) {
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(emf);
        return transactionManager;
     }
}

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

Spring Boot - Change connection dynamically

spring boot dynamically change database

How to change logback log level dynamically in spring boot application

How can I change @Scheduler cron expression dynamically in spring boot?

Change database schema used by Spring Boot

How to not expose entities endpoints in Spring Boot application

Spring Boot - How to create entities and nested entities in single POST request

Change logging level dynamically in spring boot app

spring boot : How to set spring properties dynamically

When using Spring boot and Spring JPA - why can't I get schema generation for entities in dependency?

Spring Boot - How to set the default schema for PostgreSQL?

How to see the schema sql (DDL) in spring boot?

How to fetch EntityGraph dynamically in Spring Boot

How to return collection of entities without pagination? Spring Boot REST

spring boot - how to save many-to-one entities to database

How can i mapping entities in spring boot jpa?

How to create sample entities on app startup in a Spring Boot project?

Dynamically change application.properties values in spring boot

Dynamically change field's key name in JSON using spring boot

Handling entities inheritance spring boot

Spring : How to create similar beans in Spring Boot dynamically?

How to only generate envers schema in a spring boot application?

How to set schema in datasource for DB2 connection in Spring boot

How to change Spring Boot logo to Nyan Cat?

how to change object to string(java spring boot)

How to change data on View in Spring Boot MVC?

Spring Boot with GraphQL - schema issue

Spring Boot JPA Schema Initialization

How do you replace all the related entities in a Spring Boot app using Spring Data

TOP Ranking

  1. 1

    Failed to listen on localhost:8000 (reason: Cannot assign requested address)

  2. 2

    Loopback Error: connect ECONNREFUSED 127.0.0.1:3306 (MAMP)

  3. 3

    How to import an asset in swift using Bundle.main.path() in a react-native native module

  4. 4

    pump.io port in URL

  5. 5

    Compiler error CS0246 (type or namespace not found) on using Ninject in ASP.NET vNext

  6. 6

    BigQuery - concatenate ignoring NULL

  7. 7

    ngClass error (Can't bind ngClass since it isn't a known property of div) in Angular 11.0.3

  8. 8

    ggplotly no applicable method for 'plotly_build' applied to an object of class "NULL" if statements

  9. 9

    Spring Boot JPA PostgreSQL Web App - Internal Authentication Error

  10. 10

    How to remove the extra space from right in a webview?

  11. 11

    java.lang.NullPointerException: Cannot read the array length because "<local3>" is null

  12. 12

    Jquery different data trapped from direct mousedown event and simulation via $(this).trigger('mousedown');

  13. 13

    flutter: dropdown item programmatically unselect problem

  14. 14

    How to use merge windows unallocated space into Ubuntu using GParted?

  15. 15

    Change dd-mm-yyyy date format of dataframe date column to yyyy-mm-dd

  16. 16

    Nuget add packages gives access denied errors

  17. 17

    Svchost high CPU from Microsoft.BingWeather app errors

  18. 18

    Can't pre-populate phone number and message body in SMS link on iPhones when SMS app is not running in the background

  19. 19

    12.04.3--- Dconf Editor won't show com>canonical>unity option

  20. 20

    Any way to remove trailing whitespace *FOR EDITED* lines in Eclipse [for Java]?

  21. 21

    maven-jaxb2-plugin cannot generate classes due to two declarations cause a collision in ObjectFactory class

HotTag

Archive