私はSpring 4.3.6とSpring Boot 1.4.4を使って、WARとしてWebLogic 12cサーバーにデプロイしたときにJNDI接続を介してOracleデータベースに接続できるアプリケーションを持っています。SpringブートJARをリモートOracleデータベースに接続するにはどうすればよいですか?
Tomcatサーバーが組み込まれたスタンドアロンのJARとしてエクスポートできる既存のプロジェクトの変更バージョンを作成する必要があります。 JAR内から同じデータベースにどのように接続すればよいですか?
これは(クラスパスsrc
付き)現在のWARアプリケーションのための私の現在の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
は静的なWebページです。
これは私の既存のコードです:
@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と同じデータベースに接続するには、何を変更する必要がありますか?
私の問題に関連する何か言及している参照やチュートリアルはありません。ちょうど私が修正する必要があるものをどのように私を親切に歩いてください。ありがとう!
編集:
このアプリケーションの詳細情報を追加するには:私のOracleデータベースには、次の列を持つテーブルPEOPLE
が含まれています
ID INT NOT NULL,
NAME VARCHAR(20) NOT NULL,
AGE INT NOT NULL,
PRIMARY KEY (ID)
form.html
はその後、A提出sampleQuery()
へのPOSTリクエストを送信フォーム入力からのデータベースクエリ。
アプリケーションをWARとしてデプロイし、JNDI経由でデータベースに接続すると、データベースクエリが正常に実行されます。
はしかし、あたり市の答えとしてapplication.properties
を変更した後:私は、Eclipseの中のJavaアプリケーションとして実行したときに
spring.datasource.url=jdbc:oracle:thin:@ip-address:port:orcl
spring.datasource.username=user-name
spring.datasource.password=password
次のエラーがスローされますが起こっ
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
何?
ちょうど私 'org.springframework.beans.factoryを与えるたとえば、application.propertiesで、次のセクションを宣言する可能性があります。NoSuchBeanDefinitionException: 'org.springframework.jdbc.core.JdbcTemplate'タイプの適格なBeanがありません:autowire候補と見なされる少なくとも1つのbeanが必要です。依存関係の注釈:{@ org.springframework.beans.factory.annotation.Autowired(必須= true)} ' – thegreatjedi
あなたのpom.xmlまたはant xmlを共有してください – mhshimul