これで、mysql dbをメモリ内のhsqldbに移行しようとしています。私はこれに対称を使用しています。私は、次のプロパティを使用してMySQLに接続されたサービスとしてSymmetricDSはを開始しました:メモリ内のhsqldbを使った対称コード
engine.name=corp-000
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost/corp?tinyInt1isBit=false
db.user=root
db.password=
registration.url=
sync.url=http://localhost:31415/sync/corp-000
group.id=corp
external.id=000
job.purge.period.time.ms=7200000
job.routing.period.time.ms=5000
job.push.period.time.ms=10000
job.pull.period.time.ms=10000
initial.load.create.first=true
auto.registration=true
auto.reload=true
を作成し、必要なデータを持つすべてのSYMテーブルをロードしました。
次は、ClientSymmetricEngineを使用してjavaを使用してclientnodeを作成しました。この私のJavaコードです:
public ClientNode(File file) throws FileNotFoundException, IOException {
propFile = file;
Properties propertiesFile = new Properties();
propertiesFile.load(new FileReader(propFile));
cEngine = new ClientSymmetricEngine(propertiesFile, true);
//getcEngine().openRegistration("store", "001");// client is the name of the node group and 001 is the ID
getcEngine().setup();
getcEngine().start();
}
public ClientSymmetricEngine getcEngine() {
return cEngine;
}
これはCLIENTNODEプロパティファイルです:
engine.name=store-001
db.driver=org.hsqldb.jdbcDriver
db.url=jdbc:hsqldb:mem:store001
db.user=sa
db.password=
registration.url=http://localhost:31415/sync/corp-000
group.id=store
external.id=001
job.routing.period.time.ms=5000
job.push.period.time.ms=10000
job.pull.period.time.ms=10000
以下はCLIENTNODEを起動し、同じJVM上で実行されているレプリケート表からデータを取得するために私のコードです:
public static void main(String[] args) {
try {
new ClientNode(new File("C:/Train/src/main/resources/store-001.properties"));
Thread.currentThread();
Thread.sleep(40000);
Class.forName("org.hsqldb.jdbcDriver");
con = DriverManager.getConnection("jdbc:hsqldb:mem:store001;create=false", "sa", "");
System.out.println("Connection created successfully");
stmt = con.createStatement();
rs = stmt.executeQuery("SELECT item_id, name FROM item");
while (rs.next()) {
System.out.println(rs.getInt("item_id") + " | " + rs.getString("name"));
}
} catch (Exception e) {
e.printStackTrace(System.out);
}
}
私がmain()を実行するとき、私はsymmetricdsがmysqlからhsqlへの複製を行うことを知っています。しかし、私はhsqlから同じデータをフェッチしようとすると、私はテーブルオブジェクトが例外を見つけることができません。
java.sql.SQLException: user lacks privilege or object not found: ITEM
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source)
at org.hsqldb.jdbc.JDBCStatement.executeQuery(Unknown Source)
at hsqlDB.FetchData.<init>(FetchData.java:24)
at hsqlDB.ConnectDatabase.main(ConnectDatabase.java:15)
完全なスタックトレースを接続します。
誰かが私がここで間違っていることを教えてもらえれば幸いです。
@Borisを:uは私の質問を見れば、再びファイルベースのHSQLDBを私は、メモリ内HSQLDBを使用していますことに気づくとしません。はい、私のURLと構文はすべて正しいです。これが起こる可能性がある他の理由はありますか?見て私に知らせる – Edward