Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
apollo
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
openSource
apollo
Commits
1ca1b8d1
Commit
1ca1b8d1
authored
May 30, 2017
by
张乐
Committed by
GitHub
May 30, 2017
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #627 from nobodyiam/datasource
use custom connection validator instead of sending SELECT 1 query
parents
425f0e94
037e0036
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
86 additions
and
2 deletions
+86
-2
DataSourceValidator.java
...ip/framework/apollo/common/utils/DataSourceValidator.java
+27
-0
application.properties
apollo-common/src/main/resources/application.properties
+2
-1
AllTests.java
...test/java/com/ctrip/framework/apollo/common/AllTests.java
+2
-1
DataSourceValidatorTest.java
...ramework/apollo/common/utils/DataSourceValidatorTest.java
+55
-0
No files found.
apollo-common/src/main/java/com/ctrip/framework/apollo/common/utils/DataSourceValidator.java
0 → 100644
View file @
1ca1b8d1
package
com
.
ctrip
.
framework
.
apollo
.
common
.
utils
;
import
org.apache.tomcat.jdbc.pool.Validator
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
java.sql.Connection
;
/**
* @author Jason Song(song_s@ctrip.com)
*/
public
class
DataSourceValidator
implements
Validator
{
private
static
final
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
DataSourceValidator
.
class
);
private
static
final
int
DEFAULT_VALIDATE_TIMEOUT_IN_SECONDS
=
5
;
@Override
public
boolean
validate
(
Connection
connection
,
int
validateAction
)
{
boolean
isValid
=
false
;
try
{
isValid
=
connection
.
isValid
(
DEFAULT_VALIDATE_TIMEOUT_IN_SECONDS
);
}
catch
(
Throwable
ex
)
{
LOGGER
.
warn
(
"Data source validation error"
,
ex
);
}
return
isValid
;
}
}
apollo-common/src/main/resources/application.properties
View file @
1ca1b8d1
...
@@ -3,7 +3,8 @@ spring.http.converters.preferred-json-mapper=gson
...
@@ -3,7 +3,8 @@ spring.http.converters.preferred-json-mapper=gson
# DataSource
# DataSource
spring.datasource.testWhileIdle
=
true
spring.datasource.testWhileIdle
=
true
spring.datasource.testOnBorrow
=
true
spring.datasource.testOnBorrow
=
true
spring.datasource.validationQuery
=
SELECT 1
spring.datasource.validatorClassName
=
com.ctrip.framework.apollo.common.utils.DataSourceValidator
spring.datasource.validationInterval
=
5000
spring.datasource.initSQL
=
set names utf8mb4
spring.datasource.initSQL
=
set names utf8mb4
# Naming strategy
# Naming strategy
...
...
apollo-common/src/test/java/com/ctrip/framework/apollo/common/AllTests.java
View file @
1ca1b8d1
package
com
.
ctrip
.
framework
.
apollo
.
common
;
package
com
.
ctrip
.
framework
.
apollo
.
common
;
import
com.ctrip.framework.apollo.common.utils.DataSourceValidatorTest
;
import
com.ctrip.framework.apollo.common.utils.InputValidatorTest
;
import
com.ctrip.framework.apollo.common.utils.InputValidatorTest
;
import
org.junit.runner.RunWith
;
import
org.junit.runner.RunWith
;
...
@@ -8,7 +9,7 @@ import org.junit.runners.Suite.SuiteClasses;
...
@@ -8,7 +9,7 @@ import org.junit.runners.Suite.SuiteClasses;
@RunWith
(
Suite
.
class
)
@RunWith
(
Suite
.
class
)
@SuiteClasses
({
@SuiteClasses
({
InputValidatorTest
.
class
InputValidatorTest
.
class
,
DataSourceValidatorTest
.
class
})
})
public
class
AllTests
{
public
class
AllTests
{
...
...
apollo-common/src/test/java/com/ctrip/framework/apollo/common/utils/DataSourceValidatorTest.java
0 → 100644
View file @
1ca1b8d1
package
com
.
ctrip
.
framework
.
apollo
.
common
.
utils
;
import
org.junit.Before
;
import
org.junit.Test
;
import
java.sql.Connection
;
import
static
org
.
junit
.
Assert
.*;
import
static
org
.
mockito
.
Matchers
.
anyInt
;
import
static
org
.
mockito
.
Mockito
.
mock
;
import
static
org
.
mockito
.
Mockito
.
when
;
/**
* @author Jason Song(song_s@ctrip.com)
*/
public
class
DataSourceValidatorTest
{
private
DataSourceValidator
datasourceValidator
;
@Before
public
void
setUp
()
throws
Exception
{
datasourceValidator
=
new
DataSourceValidator
();
}
@Test
public
void
testValidateSuccessfully
()
throws
Exception
{
Connection
someConnection
=
mock
(
Connection
.
class
);
int
someValidationAction
=
1
;
when
(
someConnection
.
isValid
(
anyInt
())).
thenReturn
(
true
);
assertTrue
(
datasourceValidator
.
validate
(
someConnection
,
someValidationAction
));
}
@Test
public
void
testValidateFailed
()
throws
Exception
{
Connection
someConnection
=
mock
(
Connection
.
class
);
int
someValidationAction
=
1
;
when
(
someConnection
.
isValid
(
anyInt
())).
thenReturn
(
false
);
assertFalse
(
datasourceValidator
.
validate
(
someConnection
,
someValidationAction
));
}
@Test
public
void
testValidateWithException
()
throws
Exception
{
Connection
someConnection
=
mock
(
Connection
.
class
);
int
someValidationAction
=
1
;
when
(
someConnection
.
isValid
(
anyInt
())).
thenThrow
(
new
RuntimeException
(
"error"
));
assertFalse
(
datasourceValidator
.
validate
(
someConnection
,
someValidationAction
));
}
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment