2017-02-10 137 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

相關問題