{"id":6309,"date":"2020-10-15T17:39:15","date_gmt":"2020-10-15T12:09:15","guid":{"rendered":"https:\/\/www.innovationm.com\/blog\/?p=6309"},"modified":"2020-10-15T17:39:15","modified_gmt":"2020-10-15T12:09:15","slug":"spring-boot-multiple-database-configuration","status":"publish","type":"post","link":"https:\/\/www.innovationm.com\/blog\/spring-boot-multiple-database-configuration\/","title":{"rendered":"Spring Boot Multiple Database Configuration"},"content":{"rendered":"<p><span style=\"font-weight: 400;\">Sometimes it&#8217;s our application requirement to deal with multiple databases. Spring Boot helps us to configure multiple databases in a single application. This blog will help to configure multiple datasources into a spring boot application.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">To use multiple DataSources, let\u2019s add the following details in the property file.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Here we configured \u2018foo\u2019 datasource and \u2018bar\u2019 datasource.<\/span><\/p>\n<p><strong>application.properties<\/strong><\/p>\n<pre class=\"lang:default decode:true \">spring.foo.datasource.url = jdbc:mysql:\/\/localhost:3306\/foo\r\n\r\nspring.foo.datasource.username = root\r\n\r\nspring.foo.datasource.password = root\r\n\r\nspring.foo.datasource.driver-class-name = com.mysql.cj.jdbc.Driver\r\n\r\nspring.bar.datasource.url = jdbc:mysql:\/\/localhost:3306\/bar\r\n\r\nspring.bar.datasource.username = root\r\n\r\nspring.bar.datasource.password = root\r\n\r\nspring.bar.datasource.driver-class-name = com.mysql.cj.jdbc.Driver\r\n\r\nlogging.level.org.springframework = INFO<\/pre>\n<p><b>JPA Entities and JPA Repositories<\/b><\/p>\n<p><span style=\"font-weight: 400;\">\u00a0Let\u2019s define the following 2 JPA entities and repositories.<\/span><\/p>\n<p><b>Product Entity<\/b><\/p>\n<pre class=\"lang:default decode:true\">@Entity\r\n\r\n@Table(name = \"products\")\r\n\r\npublic class Product {\r\n\r\n\u00a0\u00a0\u00a0\u00a0@Id\r\n\r\n\u00a0\u00a0\u00a0\u00a0@GeneratedValue(strategy = GenerationType.IDENTITY)\r\n\r\n\u00a0\u00a0\u00a0\u00a0private Long id;\r\n\r\n\u00a0\u00a0\u00a0\u00a0@Column(nullable = false)\r\n\r\n\u00a0\u00a0\u00a0\u00a0private String name;\r\n\r\n\u00a0\u00a0\u00a0\u00a0@Column(nullable = false)\r\n\r\n\u00a0\u00a0\u00a0\u00a0private Double price;\r\n\r\n\u00a0\u00a0\u00a0\u00a0public Product() {\r\n\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\r\n\u00a0\u00a0\u00a0\u00a0public Product(String name, Double price) {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0this.name = name;\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0this.price = price;\r\n\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\r\n\u00a0\u00a0\u00a0\u00a0public Long getId() {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return id;\r\n\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\r\n\u00a0\u00a0\u00a0\u00a0public void setId(Long id) {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0this.id = id;\r\n\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\r\n\u00a0\u00a0\u00a0\u00a0public String getName() {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return name;\r\n\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\r\n\u00a0\u00a0\u00a0\u00a0public void setName(String name) {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0this.name = name;\r\n\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\r\n\u00a0\u00a0\u00a0\u00a0public Double getPrice() {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return price;\r\n\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\r\n\u00a0\u00a0\u00a0\u00a0public void setPrice(Double price) {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0this.price = price;\r\n\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\r\n}<\/pre>\n<p><b>User Entity<\/b><\/p>\n<pre class=\"lang:default decode:true \">@Entity\r\n\r\n@Table(name = \"users\")\r\n\r\npublic class User {\r\n\r\n\u00a0\u00a0\u00a0\u00a0@Id\r\n\r\n\u00a0\u00a0\u00a0\u00a0@GeneratedValue(strategy = GenerationType.IDENTITY)\r\n\r\n\u00a0\u00a0\u00a0\u00a0private Long id;\r\n\r\n\u00a0\u00a0\u00a0\u00a0@Column(nullable = false)\r\n\r\n\u00a0\u00a0\u00a0\u00a0private String name;\r\n\r\n\u00a0\u00a0\u00a0\u00a0@Column(nullable = false)\r\n\r\n\u00a0\u00a0\u00a0\u00a0private String email;\r\n\r\n\u00a0\u00a0\u00a0\u00a0public User() {\r\n\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\r\n\u00a0\u00a0\u00a0\u00a0public User(String name, String email) {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0this.name = name;\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0this.email = email;\r\n\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\r\n\u00a0\u00a0\u00a0\u00a0public Long getId() {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return id;\r\n\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\r\n\u00a0\u00a0\u00a0\u00a0public void setId(Long id) {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0this.id = id;\r\n\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\r\n\u00a0\u00a0\u00a0\u00a0public String getName() {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return name;\r\n\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\r\n\u00a0\u00a0\u00a0\u00a0public void setName(String name) {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0this.name = name;\r\n\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\r\n\u00a0\u00a0\u00a0\u00a0public String getEmail() {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return email;\r\n\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\r\n\u00a0\u00a0\u00a0\u00a0public void setEmail(String email) {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0this.email = email;\r\n\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\r\n}<\/pre>\n<p><b>Product Repository\u00a0<\/b><\/p>\n<pre class=\"lang:default decode:true\">@Repository\r\n\r\npublic interface ProductRepository extends JpaRepository&lt;Product, Long&gt; {\r\n\r\n}<\/pre>\n<p><b>User Repository\u00a0<\/b><\/p>\n<pre class=\"lang:default decode:true \">@Repository\r\n\r\npublic interface UserRepository extends JpaRepository&lt;User, Long&gt; {\r\n\r\n}<\/pre>\n<p><span style=\"font-weight: 400;\">We added both entities and repositories in different packages.<\/span><\/p>\n<h2><b>Package Structure<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">We will have a different package structure for both database entities and repositories. This is important while creating configuration classes. While creating config classes, we need to specify the base packages which will be used by Spring to read different configurations and create multiple Datasource. For our example, this is how the package structure looks like:<\/span><\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"alignnone wp-image-6310 size-full\" src=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2020\/10\/project-structure.png\" alt=\"\" width=\"848\" height=\"1047\" srcset=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2020\/10\/project-structure.png 848w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2020\/10\/project-structure-243x300.png 243w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2020\/10\/project-structure-829x1024.png 829w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2020\/10\/project-structure-768x948.png 768w, https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2020\/10\/project-structure-624x770.png 624w\" sizes=\"(max-width: 848px) 100vw, 848px\" \/><\/p>\n<h2><b>DataSource Configuration<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">We will create two <\/span><span style=\"font-weight: 400;\">Spring configuration classes<\/span><span style=\"font-weight: 400;\"> whose responsibilities are to read the configurations and make sure all necessary setup\/classes are available to our project on the application startup.<\/span><\/p>\n<p><b>FooDatabase Configuration\u00a0<\/b><\/p>\n<pre class=\"lang:default decode:true \">@Configuration\r\n\r\n@Primary\r\n\r\n@EnableJpaRepositories(basePackages = \"com.example.multipledb.repository.foo\",\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0entityManagerFactoryRef = \"fooEntityManagerFactory\", transactionManagerRef = \"fooTransactionManager\")\r\n\r\n@EnableTransactionManagement\r\n\r\npublic class FooDatabaseConfiguration {\r\n\r\n\u00a0\u00a0\u00a0\u00a0@Bean(name = \"fooDataSourceProperties\")\r\n\r\n\u00a0\u00a0\u00a0\u00a0@ConfigurationProperties(prefix = \"spring.foo.datasource\")\r\n\r\n\u00a0\u00a0\u00a0\u00a0@Primary\r\n\r\n\u00a0\u00a0\u00a0\u00a0DataSourceProperties getDataSourceProperties() {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return new DataSourceProperties();\r\n\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\r\n\u00a0\u00a0\u00a0\u00a0@Bean(name = \"fooDataSource\")\r\n\r\n\u00a0\u00a0\u00a0\u00a0@Primary\r\n\r\n\u00a0\u00a0\u00a0\u00a0HikariDataSource getDatasource(DataSourceProperties properties) {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return properties.initializeDataSourceBuilder().type(HikariDataSource.class).build();\r\n\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\r\n\r\n\u00a0\u00a0\u00a0\u00a0@Bean(name = \"fooEntityManagerFactory\")\r\n\r\n\u00a0\u00a0\u00a0\u00a0@Primary\r\n\r\n\u00a0\u00a0\u00a0\u00a0LocalContainerEntityManagerFactoryBean getEntityManagerFactory(DataSource dataSource) {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0LocalContainerEntityManagerFactoryBean();\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0entityManagerFactoryBean.setDataSource(dataSource);\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0entityManagerFactoryBean.setPackagesToScan(\"com.example.multipledb.entity.foo\");\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0entityManagerFactoryBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter());\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Properties properties = new Properties();\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0properties.put(\"hibernate.dialect\", \"org.hibernate.dialect.MySQL5Dialect\");\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0entityManagerFactoryBean.setJpaProperties(properties);\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return entityManagerFactoryBean;\r\n\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\r\n\u00a0\u00a0\u00a0\u00a0@Bean(name = \"fooTransactionManager\")\r\n\r\n\u00a0\u00a0\u00a0\u00a0@Primary\r\n\r\n\u00a0\u00a0\u00a0\u00a0JpaTransactionManager getTransactionManager(LocalContainerEntityManagerFactoryBean\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0entityManagerFactoryBean) {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0JpaTransactionManager transactionManager = new JpaTransactionManager(\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Objects.requireNonNull(entityManagerFactoryBean.getObject()));\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return transactionManager;\r\n\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\r\n}<\/pre>\n<p><span style=\"font-weight: 400;\">In the above example class:<\/span><\/p>\n<p><b>@Configuration<\/b><span style=\"font-weight: 400;\">: indicate that our class declares @Bean methods that will be processed by the Spring container to be used at runtime.<\/span><\/p>\n<p><b>@EnableTransactionManagement<\/b><span style=\"font-weight: 400;\">: used to allow the usage of annotation-driven transaction management capability.<\/span><\/p>\n<p><b>@EnableJpaRepositories<\/b><span style=\"font-weight: 400;\">: since we are using spring data JPA, this annotation is required to tell Spring to enable JPA repositories. We specified the entity manager factory and the transaction manager beans to be used in the JPA repositories.<\/span><\/p>\n<p><b>@ConfigurationProperties<\/b><span style=\"font-weight: 400;\">: This annotation tells spring to pick up the data source properties that are prefixed with &#8220;spring.foo.datasource&#8221; from the application.properties file and build a data source using DataSourceBuilder.<\/span><\/p>\n<p><b>@Primary<\/b><span style=\"font-weight: 400;\">: Basically tell the spring that the configured data source is primary.<\/span><\/p>\n<p><b>BarDatabase Configuration\u00a0<\/b><\/p>\n<pre class=\"lang:default decode:true \">@Configuration\r\n\r\n@EnableJpaRepositories(basePackages = \"com.example.multipledb.repository.bar\",\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0entityManagerFactoryRef = \"barEntityManagerFactory\", transactionManagerRef = \"barTransactionManager\")\r\n\r\n@EnableTransactionManagement\r\n\r\npublic class BarDatabaseConfiguration {\r\n\r\n\u00a0\u00a0\u00a0\u00a0@Bean(name = \"barDataSourceProperties\")\r\n\r\n\u00a0\u00a0\u00a0\u00a0@ConfigurationProperties(prefix = \"spring.bar.datasource\")\r\n\r\n\u00a0\u00a0\u00a0\u00a0DataSourceProperties getDataSourceProperties() {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return new DataSourceProperties();\r\n\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\r\n\u00a0\u00a0\u00a0\u00a0@Bean(name = \"barDataSource\")\r\n\r\n\u00a0\u00a0\u00a0\u00a0HikariDataSource getDatasource(@Qualifier(\"barDataSourceProperties\") DataSourceProperties properties) {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return properties.initializeDataSourceBuilder().type(HikariDataSource.class).build();\r\n\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\r\n\u00a0\u00a0\u00a0\u00a0@Bean(name = \"barEntityManagerFactory\")\r\n\r\n\u00a0\u00a0\u00a0\u00a0LocalContainerEntityManagerFactoryBean getEntityManagerFactory(\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@Qualifier(\"barDataSource\") DataSource dataSource) {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0LocalContainerEntityManagerFactoryBean entityManagerFactoryBean =\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0new LocalContainerEntityManagerFactoryBean();\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0entityManagerFactoryBean.setDataSource(dataSource);\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0entityManagerFactoryBean.setPackagesToScan(\"com.example.multipledb.entity.bar\");\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0entityManagerFactoryBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter());\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Properties properties = new Properties();\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0properties.put(\"hibernate.dialect\", \"org.hibernate.dialect.MySQL5Dialect\");\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0entityManagerFactoryBean.setJpaProperties(properties);\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return entityManagerFactoryBean;\r\n\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\r\n\u00a0\u00a0\u00a0\u00a0@Bean(name = \"barTransactionManager\")\r\n\r\n\u00a0\u00a0\u00a0\u00a0JpaTransactionManager getTransactionManager(\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0@Qualifier(\"barEntityManagerFactory\") LocalContainerEntityManagerFactoryBean\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0entityManagerFactoryBean) {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0JpaTransactionManager transactionManager = new JpaTransactionManager(\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Objects.requireNonNull(entityManagerFactoryBean.getObject()));\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return transactionManager;\r\n\r\n\u00a0\u00a0\u00a0\u00a0}\r\n\r\n}<\/pre>\n<p><span style=\"font-weight: 400;\">When we are dealing with just one datasource and Spring Boot, data source configuration is simple. Spring Boot provides a lot of autoconfiguration.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">However, if you need to connect to multiple data sources with Spring Boot, additional configuration is needed.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sometimes it&#8217;s our application requirement to deal with multiple databases. Spring Boot helps us to configure multiple databases in a single application. This blog will help to configure multiple datasources into a spring boot application. To use multiple DataSources, let\u2019s add the following details in the property file. Here we configured \u2018foo\u2019 datasource and \u2018bar\u2019 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":6311,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[256,441],"tags":[14,546],"class_list":["post-6309","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java-application","category-spring-boot","tag-innovationm","tag-spring-boot-multiple-database-configuration"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Spring Boot Multiple Database Configuration - InnovationM - Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.innovationm.com\/blog\/spring-boot-multiple-database-configuration\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Spring Boot Multiple Database Configuration - InnovationM - Blog\" \/>\n<meta property=\"og:description\" content=\"Sometimes it&#8217;s our application requirement to deal with multiple databases. Spring Boot helps us to configure multiple databases in a single application. This blog will help to configure multiple datasources into a spring boot application. To use multiple DataSources, let\u2019s add the following details in the property file. Here we configured \u2018foo\u2019 datasource and \u2018bar\u2019 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.innovationm.com\/blog\/spring-boot-multiple-database-configuration\/\" \/>\n<meta property=\"og:site_name\" content=\"InnovationM - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-10-15T12:09:15+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2020\/10\/newwwww.png\" \/>\n\t<meta property=\"og:image:width\" content=\"770\" \/>\n\t<meta property=\"og:image:height\" content=\"413\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"InnovationM Admin\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"InnovationM Admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-boot-multiple-database-configuration\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-boot-multiple-database-configuration\\\/\"},\"author\":{\"name\":\"InnovationM Admin\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#\\\/schema\\\/person\\\/a831bf4602d69d1fa452e3de0c8862ed\"},\"headline\":\"Spring Boot Multiple Database Configuration\",\"datePublished\":\"2020-10-15T12:09:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-boot-multiple-database-configuration\\\/\"},\"wordCount\":347,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-boot-multiple-database-configuration\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2020\\\/10\\\/newwwww.png\",\"keywords\":[\"InnovationM\",\"Spring Boot Multiple Database Configuration\"],\"articleSection\":[\"Java Application\",\"Spring Boot\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-boot-multiple-database-configuration\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-boot-multiple-database-configuration\\\/\",\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-boot-multiple-database-configuration\\\/\",\"name\":\"Spring Boot Multiple Database Configuration - InnovationM - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-boot-multiple-database-configuration\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-boot-multiple-database-configuration\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2020\\\/10\\\/newwwww.png\",\"datePublished\":\"2020-10-15T12:09:15+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#\\\/schema\\\/person\\\/a831bf4602d69d1fa452e3de0c8862ed\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-boot-multiple-database-configuration\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-boot-multiple-database-configuration\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-boot-multiple-database-configuration\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2020\\\/10\\\/newwwww.png\",\"contentUrl\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2020\\\/10\\\/newwwww.png\",\"width\":770,\"height\":413},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/spring-boot-multiple-database-configuration\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Spring Boot Multiple Database Configuration\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/\",\"name\":\"InnovationM - Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#\\\/schema\\\/person\\\/a831bf4602d69d1fa452e3de0c8862ed\",\"name\":\"InnovationM Admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g\",\"caption\":\"InnovationM Admin\"},\"sameAs\":[\"http:\\\/\\\/www.innovationm.com\\\/\"],\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/author\\\/innovationmadmin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Spring Boot Multiple Database Configuration - InnovationM - Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.innovationm.com\/blog\/spring-boot-multiple-database-configuration\/","og_locale":"en_US","og_type":"article","og_title":"Spring Boot Multiple Database Configuration - InnovationM - Blog","og_description":"Sometimes it&#8217;s our application requirement to deal with multiple databases. Spring Boot helps us to configure multiple databases in a single application. This blog will help to configure multiple datasources into a spring boot application. To use multiple DataSources, let\u2019s add the following details in the property file. Here we configured \u2018foo\u2019 datasource and \u2018bar\u2019 [&hellip;]","og_url":"https:\/\/www.innovationm.com\/blog\/spring-boot-multiple-database-configuration\/","og_site_name":"InnovationM - Blog","article_published_time":"2020-10-15T12:09:15+00:00","og_image":[{"width":770,"height":413,"url":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2020\/10\/newwwww.png","type":"image\/png"}],"author":"InnovationM Admin","twitter_misc":{"Written by":"InnovationM Admin","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.innovationm.com\/blog\/spring-boot-multiple-database-configuration\/#article","isPartOf":{"@id":"https:\/\/www.innovationm.com\/blog\/spring-boot-multiple-database-configuration\/"},"author":{"name":"InnovationM Admin","@id":"https:\/\/www.innovationm.com\/blog\/#\/schema\/person\/a831bf4602d69d1fa452e3de0c8862ed"},"headline":"Spring Boot Multiple Database Configuration","datePublished":"2020-10-15T12:09:15+00:00","mainEntityOfPage":{"@id":"https:\/\/www.innovationm.com\/blog\/spring-boot-multiple-database-configuration\/"},"wordCount":347,"commentCount":0,"image":{"@id":"https:\/\/www.innovationm.com\/blog\/spring-boot-multiple-database-configuration\/#primaryimage"},"thumbnailUrl":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2020\/10\/newwwww.png","keywords":["InnovationM","Spring Boot Multiple Database Configuration"],"articleSection":["Java Application","Spring Boot"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.innovationm.com\/blog\/spring-boot-multiple-database-configuration\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.innovationm.com\/blog\/spring-boot-multiple-database-configuration\/","url":"https:\/\/www.innovationm.com\/blog\/spring-boot-multiple-database-configuration\/","name":"Spring Boot Multiple Database Configuration - InnovationM - Blog","isPartOf":{"@id":"https:\/\/www.innovationm.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.innovationm.com\/blog\/spring-boot-multiple-database-configuration\/#primaryimage"},"image":{"@id":"https:\/\/www.innovationm.com\/blog\/spring-boot-multiple-database-configuration\/#primaryimage"},"thumbnailUrl":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2020\/10\/newwwww.png","datePublished":"2020-10-15T12:09:15+00:00","author":{"@id":"https:\/\/www.innovationm.com\/blog\/#\/schema\/person\/a831bf4602d69d1fa452e3de0c8862ed"},"breadcrumb":{"@id":"https:\/\/www.innovationm.com\/blog\/spring-boot-multiple-database-configuration\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.innovationm.com\/blog\/spring-boot-multiple-database-configuration\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.innovationm.com\/blog\/spring-boot-multiple-database-configuration\/#primaryimage","url":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2020\/10\/newwwww.png","contentUrl":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2020\/10\/newwwww.png","width":770,"height":413},{"@type":"BreadcrumbList","@id":"https:\/\/www.innovationm.com\/blog\/spring-boot-multiple-database-configuration\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.innovationm.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Spring Boot Multiple Database Configuration"}]},{"@type":"WebSite","@id":"https:\/\/www.innovationm.com\/blog\/#website","url":"https:\/\/www.innovationm.com\/blog\/","name":"InnovationM - Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.innovationm.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.innovationm.com\/blog\/#\/schema\/person\/a831bf4602d69d1fa452e3de0c8862ed","name":"InnovationM Admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5c99d9eece9dfbc82297cf34ddd58e9fe05bb52fe66c8f6bf6c0a45bfb6d7629?s=96&r=g","caption":"InnovationM Admin"},"sameAs":["http:\/\/www.innovationm.com\/"],"url":"https:\/\/www.innovationm.com\/blog\/author\/innovationmadmin\/"}]}},"_links":{"self":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/posts\/6309","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/comments?post=6309"}],"version-history":[{"count":0,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/posts\/6309\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/media\/6311"}],"wp:attachment":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/media?parent=6309"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/categories?post=6309"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/tags?post=6309"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}