AppVeyorのSQL ServerにJDBC Driverで接続する
備忘録です。 簡単な経緯は以下の通り。
あと体力あれば URL これ使って scalikejdbc の テストできるか試してみたい
@pocketberserker やってみたんですけど URL テストの実行までいったけれど、(設定間違ってるのか)SQL Server繋げられてないです
2015-02-13 21:10:03 via Twitter Web Client to @pocketberserker
rpscala でそういう話題があったのに関連して、 AppVeyor で頑張れないかを xuwei さんのコードを引き継いで試してみました。
参考資料
- SQL Server 2012 ExpressにJava(JDBC)で外部から接続する - Symfoware
- configuration - Enable tcp\ip remote connections to sql server express already installed database with code or script(query) - Stack Overflow
だいたいこの辺りを情報を AppVeyor で実行できるようにしていきます。
設定やスクリプト
説明が面倒なので結論だけはります。 設定値やプロジェクト名もそのままになっているので、適宜読み替えてください。 また、今回の内容と直接関係のない部分は削っています。
あと、sbtはリポジトリに同梱しているパターンで試しているので、同梱したくない場合はsbtをダウンロードする必要もあります。
# appveyor.yml services: mssql2014 build_script: - netsh advfirewall firewall add rule name="jdbc driver for sql server udp" dir=in action=allow protocol=UDP localport=1434 - sc config sqlbrowser start= auto - net start sqlbrowser - ps: Set-ExecutionPolicy RemoteSigned - ps: .\Setting-SqlServer.ps1 - net stop "SQL Server (SQL2014)" - net start "SQL Server (SQL2014)" - netsh advfirewall firewall add rule name="jdbc driver for sql server tcp" dir=in action=allow protocol=TCP localport=1433 - sqlcmd -S ".\SQL2014" -U sa -P Password12! -Q "create database scalikejdbc;" - del scalikejdbc-core\src\test\resources\jdbc.properties - move scalikejdbc-core\src\test\resources\jdbc_sqlserver.properties scalikejdbc-core\src\test\resources\jdbc.properties - ps: wget http://download.microsoft.com/download/0/2/A/02AAE597-3865-456C-AE7F-613F99F850A8/sqljdbc_4.1.5605.100_enu.tar.gz -OutFile "sqljdbc.tar.gz" - 7z x -y -oC:\projects\scalikejdbc\ sqljdbc.tar.gz - 7z x -y -oC:\projects\scalikejdbc\ sqljdbc.tar - ps: mkdir .\scalikejdbc-core\lib - ps: cp .\sqljdbc_4.1\enu\sqljdbc41.jar .\scalikejdbc-core\lib\
// Setting-SqlServer.ps1 // バージョンに合わせて ComputerManagementの値を差し替える // SQL Server 2008 -> ComputerManagement10 // SQL Server 2012 -> ComputerManagement11 Get-WmiObject -Namespace root\Microsoft\SqlServer\ComputerManagement12 -Class ServerNetworkProtocol | Where-Object {$_.InstanceName -eq 'SQL2014' -and $_.ProtocolName -eq 'Tcp'} | ForEach-Object {$_.SetEnable()} $tcpProperties = Get-WmiObject -Namespace root\Microsoft\SqlServer\ComputerManagement12 -Class ServerNetworkProtocolProperty | Where-Object {$_.InstanceName -eq 'SQL2014' -and $_.ProtocolName -eq 'Tcp' -and $_.IPAddressName -eq 'IPAll'} foreach( $tcpProperty in $tcpProperties ){ $requestedValue = "" if($tcpProperty.PropertyName -eq "TcpPort"){ $requestedValue = "1433" } $tcpProperty.SetStringValue($requestedValue) }
SQL Server 2014 Espressで試していますが、たぶん SQL Server 2008あたりまでは普通に動きそうな気がします。
重要なところ?
SQLServer用のjarを同梱するのはライセンス的につらい感じがしたので、PowerShell 3.0から使える wget
エイリアスコマンドを使ってダウンロードし、AppVeyor にインストールされている 7Zip で解凍するのがミソです。
あと、各種設定をして再起動する前にデータベースを作成してもログイン権限がなくてテーブルにアクセスできないかも?
まとめ
今回はsbtで作業しましたが、gradleでもできるのではないでしょうか。
懸念事項は、AppVeyorの実行速度が遅いことと、mysqlやpotgresql前提で書かれたSQLがSQL Serverで通らないことがまれによくあることです。