Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录/注册
切换导航
H
h2database
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
Administrator
h2database
Commits
3393ac72
提交
3393ac72
authored
7 年前
作者:
LaughingMan
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Create objects in the thread they are used in
上级
d0a56eac
显示空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
13 行增加
和
21 行删除
+13
-21
CreateCluster.java
h2/src/main/org/h2/tools/CreateCluster.java
+13
-21
没有找到文件。
h2/src/main/org/h2/tools/CreateCluster.java
浏览文件 @
3393ac72
...
@@ -18,7 +18,6 @@ import java.util.concurrent.ExecutorService;
...
@@ -18,7 +18,6 @@ import java.util.concurrent.ExecutorService;
import
java.util.concurrent.Executors
;
import
java.util.concurrent.Executors
;
import
java.util.concurrent.Future
;
import
java.util.concurrent.Future
;
import
org.h2.util.IOUtils
;
import
org.h2.util.Tool
;
import
org.h2.util.Tool
;
/**
/**
...
@@ -163,38 +162,31 @@ public class CreateCluster extends Tool {
...
@@ -163,38 +162,31 @@ public class CreateCluster extends Tool {
}
}
}
}
private
static
Future
<?>
startWriter
(
PipedReader
pipeReader
,
Statement
statSource
)
private
static
Future
<?>
startWriter
(
final
PipedReader
pipeReader
,
throws
SQLException
,
IOException
{
final
Statement
statSource
)
throws
SQLException
,
IOException
{
final
ExecutorService
thread
=
Executors
.
newFixedThreadPool
(
1
);
final
ExecutorService
thread
=
Executors
.
newFixedThreadPool
(
1
);
/*
* Pipe writer is used + closed in the inner class, in a
* separate thread (needs to be final). It should be initialized
* within try{} so an exception could be caught if creation
* fails. In that scenario, the the writer should be null and
* needs no closing, and the main goal is that finally{} should
* bring the source DB out of exclusive mode, and close the
* reader.
*/
final
PipedWriter
pipeWriter
=
new
PipedWriter
(
pipeReader
);
// Backup data from source database in script form.
// Start writing to pipe writer in separate thread.
final
ResultSet
rs
=
statSource
.
executeQuery
(
"SCRIPT"
);
// Since exceptions cannot be thrown across thread boundaries, return
// Since exceptions cannot be thrown across thread boundaries, return
// the task's future so we can check manually
// the task's future so we can check manually
Future
<?>
threadFuture
=
thread
.
submit
(
new
Runnable
()
{
Future
<?>
threadFuture
=
thread
.
submit
(
new
Runnable
()
{
@Override
@Override
public
void
run
()
{
public
void
run
()
{
try
{
/*
* If the creation of the piped writer fails, the reader will
* throw an IOException as soon as read() is called:
* IOException - if the pipe is broken, unconnected, closed,
* or an I/O error occurs.
* The reader's IOException will then trigger the finally{} that
* releases exclusive mode on the source DB.
*/
try
(
final
PipedWriter
pipeWriter
=
new
PipedWriter
(
pipeReader
);
final
ResultSet
rs
=
statSource
.
executeQuery
(
"SCRIPT"
))
{
while
(
rs
.
next
())
{
while
(
rs
.
next
())
{
pipeWriter
.
write
(
rs
.
getString
(
1
)
+
"\n"
);
pipeWriter
.
write
(
rs
.
getString
(
1
)
+
"\n"
);
}
}
}
catch
(
SQLException
|
IOException
ex
)
{
}
catch
(
SQLException
|
IOException
ex
)
{
throw
new
IllegalStateException
(
"Producing script from the source DB is failing."
,
ex
);
throw
new
IllegalStateException
(
"Producing script from the source DB is failing."
,
ex
);
}
finally
{
IOUtils
.
closeSilently
(
pipeWriter
);
}
}
}
}
});
});
...
...
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论