Java 获取Teradata数据源的连接时发生异常

Java 获取Teradata数据源的连接时发生异常,java,spring,spring-boot,jdbc,teradata,Java,Spring,Spring Boot,Jdbc,Teradata,我试图在我的控制器中注入数据源,并使用我想要的连接对象(数据源)。我用的是弹簧靴 我已经编写了两个配置类,一个用于Oracle连接,另一个用于Teradata连接 对于oracle,一切正常,但对于创建teradata数据源,我无法完善任何好的示例,因此我的配置如下所示: @Component @Configuration @ConfigurationProperties("application") public class TeradataConfiguration { @NotNull

我试图在我的控制器中注入数据源,并使用我想要的连接对象(数据源)。我用的是弹簧靴 我已经编写了两个配置类,一个用于Oracle连接,另一个用于Teradata连接

对于oracle,一切正常,但对于创建teradata数据源,我无法完善任何好的示例,因此我的配置如下所示:

@Component
@Configuration
@ConfigurationProperties("application")
public class TeradataConfiguration {


@NotNull
    private String usernameTeradata;
@NotNull
private String passwordTeradata;

@NotNull
private String servernameTeradata;

@NotNull
private String charsetTeradata;

@NotNull
private String tmodeTeradata;

@NotNull
private String dsnameTeradata;

@NotNull
private String portTeradata;

@NotNull
private String timeoutTeradata;


public void setUsernameTeradata(String usernameTeradata) {
    this.usernameTeradata = usernameTeradata;
}


public void setPasswordTeradata(String passwordTeradata) {
    this.passwordTeradata = passwordTeradata;
}


public void setServernameTeradata(String servernameTeradata) {
    this.servernameTeradata = servernameTeradata;
}


public void setCharsetTeradata(String charsetTeradata) {
    this.charsetTeradata = charsetTeradata;
}


public void setTmodeTeradata(String tmodeTeradata) {
    this.tmodeTeradata = tmodeTeradata;
}


public void setDsnameTeradata(String dsnameTeradata) {
    this.dsnameTeradata = dsnameTeradata;
}


public void setPortTeradata(String portTeradata) {
    this.portTeradata = portTeradata;
}


public void setTimeoutTeradata(String timeoutTeradata) {
    this.timeoutTeradata = timeoutTeradata;
}


@Bean
DataSource teraDataSource() throws SQLException {

    TeraDataSource teraDataSource = new TeraDataSource();
    teraDataSource.setServerName(dsnameTeradata);
    teraDataSource.setuser(usernameTeradata);
    teraDataSource.setpassword(passwordTeradata);
    teraDataSource.setCharSet(charsetTeradata);
    teraDataSource.setTMODE(tmodeTeradata);
    teraDataSource.setDSName(dsnameTeradata);
    teraDataSource.setDbsPort(portTeradata);
    teraDataSource.setLoginTimeout(Integer.valueOf(timeoutTeradata));
    return teraDataSource;

}
}

在此之后,我将这个bean注入到我的控制器中,但当我执行以下操作时:

teraDataSource.getConnection();
我得到以下例外:

    TERAJDBC4 ERROR [http-nio-8080-exec-1] 

    com.teradata.jdbc.jdk6.JDK6_SQL_Connection@fc561d Connection to TEST_DB Fri Oct 05 16:03:10 IST 2018 socket orig=TEST_DB cid=28fb20be sess=0 java.net.UnknownHostException: TEST_DB   at 
java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)   at 
java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:928)   at 
java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1323)   
at java.net.InetAddress.getAllByName0(InetAddress.java:1276)   at 
java.net.InetAddress.getAllByName(InetAddress.java:1192)   at 
java.net.InetAddress.getAllByName(InetAddress.java:1126)   at 
com.teradata.jdbc.jdbc_4.io.TDNetworkIOIF$Lookup.doLookup(TDNetworkIOIF.ja
va:223)   at 
com.teradata.jdbc.jdbc_4.io.TDNetworkIOIF$Lookup.getAddresses(TDNetworkIOI
F.java:261)   at 
com.teradata.jdbc.jdbc_4.io.TDNetworkIOIF.connectToHost(TDNetworkIOIF.java
:381)   at 
com.teradata.jdbc.jdbc_4.io.TDNetworkIOIF.createSocketConnection(TDNetwork
IOIF.java:156)   at com.teradata.jdbc.jdbc_4.io.TDNetworkIOIF.<init>
(TDNetworkIOIF.java:142)   at 
com.teradata.jdbc.jdbc.GenericTeradataConnection.getIO(GenericTeradataConn
ection.java:143)   at 
com.teradata.jdbc.jdbc.GenericLogonController.run(GenericLogonController.j
ava:100)   at com.teradata.jdbc.jdbc_4.TDSession.<init>
(TDSession.java:211)   at com.teradata.jdbc.jdk6.JDK6_SQL_Connection.
<init>(JDK6_SQL_Connection.java:36)   at 
com.teradata.jdbc.jdk6.JDK6ConnectionFactory.constructSQLConnection(JDK6Co
nnectionFactory.java:25)   at 
com.teradata.jdbc.jdbc.ConnectionFactory.createConnection(ConnectionFactor
y.java:181)   at 
com.teradata.jdbc.jdbc.ConnectionFactory.createConnection(ConnectionFactor
y.java:171)   at 
com.teradata.jdbc.TeraDataSourceBase.createNewConnection(TeraDataSourceBas
e.java:696)   at 
com.teradata.jdbc.TeraDataSource.getConnection(TeraDataSource.java:21)   
at 
com.test.dnb.dao.CompanyProfileDAO.writeToTeradataTable(CompanyProfileDAO.
java:1052)   at 
com.test.dnb.application.Controller.companyFamilyFullTree(Controller.java:
641)   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)   at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
62)   at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorIm
pl.java:43)   at java.lang.reflect.Method.invoke(Method.java:498)   at 
org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(Inv
ocableHandlerMethod.java:205)   at 
org.springframework.web.method.support.InvocableHandlerMethod.invokeForReq
uest(InvocableHandlerMethod.java:133)   at 
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHand
lerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97)   at 
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandle
rAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)   at 
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandle
rAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)   at 
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.ha
ndle(AbstractHandlerMethodAdapter.java:85)   at 
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherSer
vlet.java:967)   at 
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServ
let.java:901)   at 
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkS
ervlet.java:970)   at 
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.ja
va:861)   at javax.servlet.http.HttpServlet.service(HttpServlet.java:635)   
at 
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.
java:846)   at 
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)   at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applicati
onFilterChain.java:231)   at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilter
Chain.java:166)   at 
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)   
at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applicati
onFilterChain.java:193)   at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilter
Chain.java:166)   at 
org.springframework.web.filter.RequestContextFilter.doFilterInternal(Reque
stContextFilter.java:99)   at 
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerReques
tFilter.java:107)   at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applicati
onFilterChain.java:193)   at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilter
Chain.java:166)   at 
org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(H
ttpPutFormContentFilter.java:108)   at 
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerReques
tFilter.java:107)   at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applicati
onFilterChain.java:193)   at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilter
Chain.java:166)   at 
org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(Hid
denHttpMethodFilter.java:81)   at 
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerReques
tFilter.java:107)   at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applicati
onFilterChain.java:193)   at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilter
Chain.java:166)   at 
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(Ch
aracterEncodingFilter.java:197)   at 
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerReques
tFilter.java:107)   at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applicati
onFilterChain.java:193)   at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilter
Chain.java:166)   at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.
java:199)   at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.
java:96)   at 
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBa
se.java:504)   at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:1
40)   at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:8
1)   at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.ja
va:87)   at 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342
)   at 
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)
   at 
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.ja
va:66)   at 
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProto
col.java:790)   at 
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.j
ava:1459)   at 
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.jav
a:49)   at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:
1149)   at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java
:624)   at 
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.
java:61)   at java.lang.Thread.run(Thread.java:748)   
我能够使用Class.forName(“驱动程序名”)通过普通的jdbc连接到teradata,但面临数据源的问题


提前感谢

经过一些研发和Mark的帮助,我能够使配置正常工作。我张贴的解决方案,以便其他人可以受益于答案

如果您有如下teradata url:jdbc:teradata://server_name/database=database_nane,tmode=ANSI,charset=UTF8

数据源配置文件应如下所示:

@Component
@Configuration
@ConfigurationProperties("application")
public class TeradataConfiguration {

    @NotNull
    private String usernameTeradata;

    @NotNull
    private String passwordTeradata;

    @NotNull
    private String servernameTeradata;

    @NotNull
    private String charsetTeradata;

    @NotNull
    private String tmodeTeradata;

    @NotNull
    private String dsnameTeradata;

    @NotNull
    private String portTeradata;

    public void setUsernameTeradata(String usernameTeradata) {
        this.usernameTeradata = usernameTeradata;
    }


    public void setPasswordTeradata(String passwordTeradata) {
        this.passwordTeradata = passwordTeradata;
    }


    public void setServernameTeradata(String servernameTeradata) {
        this.servernameTeradata = servernameTeradata;
    }


    public void setCharsetTeradata(String charsetTeradata) {
        this.charsetTeradata = charsetTeradata;
    }


    public void setTmodeTeradata(String tmodeTeradata) {
        this.tmodeTeradata = tmodeTeradata;
    }


    public void setDsnameTeradata(String dsnameTeradata) {
        this.dsnameTeradata = dsnameTeradata;
    }


    public void setPortTeradata(String portTeradata) {
        this.portTeradata = portTeradata;
    }

    @Bean
    DataSource teraDataSource() throws SQLException {

        TeraDataSource teraDataSource = new TeraDataSource();
        //This is username
        teraDataSource.setuser(usernameTeradata);
        //This is password
        teraDataSource.setpassword(passwordTeradata);
        //Charset which could be UTF-8 or something else
        teraDataSource.setCharSet(charsetTeradata);
        //Tmode which could be ANSII or something else
        teraDataSource.setTMODE(tmodeTeradata);
        //This is your server name
        teraDataSource.setDSName(servernameTeradata);
        //This is teradata port which by default is 1025
        teraDataSource.setDbsPort(portTeradata);
        //This is your data base name
        teraDataSource.setDatabaseName(dsnameTeradata);
        return teraDataSource;

    }
}
在这之后,只需将这个bean注入到您的类中,然后执行以下操作

teraDataSource.getConnection()

这将为您提供teradata连接。

请发布完整的异常stacktrace;你现在张贴的东西似乎只是在StAcT迹中间的某个地方,这使得它没有信息。请修改格式:为您的属性使用代码块;很难阅读,因为您使用了引号块。@MarkRotterVeel我添加了完整的堆栈跟踪,请看一下:java.net.UnknownHostException:TEST_DB似乎表明您的连接配置有误;它尝试使用名称
TEST\u DB
连接到数据库服务器,而我认为您打算将其作为数据库名称,而不是服务器名称。您可能想查看
teradasource
的文档,看看应该如何映射属性。@MarkrotVeel感谢您指出了连接部分,也感谢我在文档中提出的建议,在测试了几个组合后,终于让代码正常工作了。这真的很有帮助,我想知道如果他们需要连接到三个不同的teradata数据库,他们会做些什么,或者使用datasourceName?
teraDataSource.getConnection()