그래서, 메모리에서 MySQL DB를 hsqldb로 마이그레이션하려고합니다. 이 대칭을 사용하고 있습니다. 나는 다음과 같은 특성을 가진 MySQL의 연결 서비스로 symmetricds을 시작했습니다 :in-memory hsqldb와 symmetricds
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를 만들었습니다.
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
는 동일한 JVM에서 실행중인 복제 된 테이블에서 데이터를 clientNode을 시작 및 가져 오기 내 코드입니다
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