我有一個使用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
下面的錯誤?
這只是給了我'org.springframework.beans.factory。NoSuchBeanDefinitionException:沒有提供'org.springframework.jdbc.core.JdbcTemplate'類型的合格bean可用:預計至少有1個bean有資格作爲autowire候選者。依賴註釋:{@ org.springframework.beans.factory.annotation.Autowired(required = true)}' – thegreatjedi
請分享您的pom.xml或ant xml – mhshimul