2017-02-10 123 views
1

我有一个使用Spring 4.3.6和Spring Boot 1.4.4的应用程序,它能够在作为WAR部署到WebLogic 12c服务器时通过JNDI连接连接到Oracle数据库。如何将Spring Boot JAR连接到远程Oracle数据库?

我现在需要创建一个我现有项目的修改版本,该项目可以作为独立的JAR导出到嵌入式Tomcat服务器中。我如何从JAR内连接到同一个数据库?

这是我当前WAR应用程序(与类路径src)目前的Eclipse目录:

WAR Project 
| src 
| | main.java 
| | | controllers 
| | | | BasicController.java 
| | | | CrudController.java 
| | | Application.java 
| | META-INF 
| | | resources 
| | | | form.html 
| JRE System Library [JDK 1.7] 
| Referenced Libraries 
| lib 
| | compile 
| | runtime 
| resources 
| | application.properties 
| target 
| WEB-INF 
| | classes 
| | weblogic.xml 
| build_war.xml 

build_war.xml对于出口而言,应用程序WAR的Ant构建文件。 form.html是一个静态网页。

这是我的现有代码:

@SpringBootApplication 
public class Application extends SpringBootServletInitializer implements WebApplicationInitializer { 
    public static void main(String[] args) { 
    SpringApplication.run(Application.class, args); 
    } 

@Override 
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
    return application.sources(Application.class); 
    } 
} 

@Controller 
public class BasicController { 
    @RequestMapping("/") 
    public String goToForm() { 
    return "form.html"; 
    } 
} 

@RestController 
public class CrudController { 
    @Autowired 
    private JdbcTemplate jdbcTemplate; 

    @PostMapping("/result") 
    public String sampleQuery(@RequestParam String tableName, @RequestParam String colNameSet, 
     @RequestParam String valueSet) { 
    String query = "INSERT INTO " + tableName + " (" + colNameSet + ") VALUES " + valueSet; 
    try { 
     jdbcTemplate.update(query); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     query = e.toString(); 
    } 
    return query; 
    } 
} 

只有一个在application.properties行:

spring.datasource.jndi-name=database.jndi.name 

的数据库URL是jdbc:oracle:[email protected]:port-number:orcl

应用程序可以以WAR的形式成功连接并更新数据库。我需要更改连接到同一个数据库的独立JAR?

我找不到任何关于Google提及任何与我的问题相关的任何参考资料或教程。请带我走过我需要修改的内容以及如何修改。谢谢!

编辑

要添加这个应用程序的更多信息:我的Oracle数据库包含以下各列的表PEOPLE

ID INT NOT NULL, 
NAME VARCHAR(20) NOT NULL, 
AGE INT NOT NULL, 
PRIMARY KEY (ID) 

form.html提交POST请求sampleQuery(),然后提交数据库从表单输入查询。

当应用程序部署为WAR并通过JNDI连接到数据库时,数据库查询将成功执行。

然而,修改application.properties按照市的回答后:

org.springframework.jdbc.BadSqlGrammarException: StatementCallback; bad SQL grammar [INSERT INTO PEOPLE (ID,NAME,AGE) VALUES ('2','Momo','21')]; nested exception is java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: PEOPLE 
at org.springframework.jdbc.support.SQLExceptionSubclassTranslator.doTranslate(SQLExceptionSubclassTranslator.java:91) 
... 
at java.lang.Thread.run(Thread.java:745) 
Caused by: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: PEOPLE 
... 
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source) 
... 
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:408) 
... 53 more 
Caused by: org.hsqldb.HsqlException: user lacks privilege or object not found: PEOPLE 
at org.hsqldb.error.Error.error(Unknown Source) 
... 
at org.hsqldb.Session.execute(Unknown Source) 
... 58 more 

发生了什么事:当我的Java应用程序中运行的Eclipse抛出

spring.datasource.url=jdbc:oracle:thin:@ip-address:port:orcl 
spring.datasource.username=user-name 
spring.datasource.password=password 

下面的错误?

+0

这只是给了我'org.springframework.beans.factory。NoSuchBeanDefinitionException:没有提供'org.springframework.jdbc.core.JdbcTemplate'类型的合格bean可用:预计至少有1个bean有资格作为autowire候选者。依赖注释:{@ org.springframework.beans.factory.annotation.Autowired(required = true)}' – thegreatjedi

+0

请分享您的pom.xml或ant xml – mhshimul

回答

0

DataSource配置由spring.datasource。*中的外部配置属性控制。例如,你可能会在声明中application.properties以下部分:

spring.datasource.url=jdbc:thin://url:port/service 
spring.datasource.username=dbuser 
spring.datasource.password=dbpass 
spring.datasource.driver-class-name=com.Oracle.OracleDriver 

参考:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-sql.html

+0

您没有在application.properties中添加Oracle驱动程序,要做您需要在类路径中添加ojdbc7 jar。但是maven的仓库中没有Oracle驱动程序。要手动添加它,请按照以下步骤操作:https://springframework.guru/configuring-spring-boot-for-oracle/ – mhshimul

相关问题