简体   繁体   中英

HA-JDBC Integration with Spring Boot JPA

I am trying to integrate HA-JDBC with Spring Boot JPA. Can any one help to integrate Ha-Jdbc with spring boot JPA,

import java.util.Arrays;

import javax.naming.NamingException;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import net.sf.hajdbc.SimpleDatabaseClusterConfigurationFactory;
import net.sf.hajdbc.cache.simple.SimpleDatabaseMetaDataCacheFactory;
import net.sf.hajdbc.dialect.oracle.OracleDialectFactory;
import net.sf.hajdbc.distributed.jgroups.JGroupsCommandDispatcherFactory;
import net.sf.hajdbc.sql.DataSource;
import net.sf.hajdbc.sql.DataSourceDatabase;
import net.sf.hajdbc.sql.DataSourceDatabaseClusterConfiguration;
import net.sf.hajdbc.state.simple.SimpleStateManagerFactory;

@Configuration
public class HAJdbcConfig
{
    @Bean
    public DataSourceDatabase db1()
    {
        DataSourceDatabase db1 = new DataSourceDatabase();
        db1.setId("db1");
        db1.setLocation("database url");
        db1.setUser("username");
        db1.setPassword("password");
        return db1;
    }

    @Bean
    public DataSourceDatabase db2()
    {
        DataSourceDatabase db1 = new DataSourceDatabase();
        db1.setId("db1");
        db1.setLocation("database url");
        db1.setUser("username");
        db1.setPassword("password");
        return db1;
    }


    @Bean
    public DataSourceDatabaseClusterConfiguration config() throws NamingException
    {
        DataSourceDatabaseClusterConfiguration config = new DataSourceDatabaseClusterConfiguration();
        config.setDatabases(Arrays.asList(db1(), db2()));
        config.setDialectFactory(new OracleDialectFactory());
        config.setDatabaseMetaDataCacheFactory(new SimpleDatabaseMetaDataCacheFactory());
        SimpleStateManagerFactory state = new SimpleStateManagerFactory();
        config.setStateManagerFactory(state);
        config.setDispatcherFactory(new JGroupsCommandDispatcherFactory());
        return config;
    }

    @Bean
    public javax.sql.DataSource primaryDataSource() throws NamingException
    {
        DataSource ds = new DataSource();
        ds.setCluster("mycluster");
        //ds.setConfig("ha-jdbc-mycluster.xml");
        ds.setConfigurationFactory(
                new SimpleDatabaseClusterConfigurationFactory<javax.sql.DataSource, DataSourceDatabase>(config()));

        return ds;

    }

}
Error retrieving database meta-data; nested exception is org.springframework.jdbc.support.MetaDataAccessException: Could not get Connection for extracting meta-data; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Failed to perform naming lookup of jdbc:oracle:thin:@//localhost:1521/orcl

I don't have much experience with HA-JDBC, but maybe I can put you in track. You never declare the Driver and the lookup is trying to create an Oracle URL connection ( dbc:oracle:thin:@//localhost:1521/orcl ). I hope it gives you an idea of where to look.

I think there is something wrong with your the jdbc url.

The format is jdbc:oracle:<drivertype>:@<database> in your case

jdbc:oracle:thin:@localhost:1521/orcl

without // before the host.

Can you use the service name for the database? The simple connection URL is jdbc:oracle:thin:@myhost:1521/myorcldbservicename. Also, you can check out the sample SpringBootApp for an example.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM