DBFlute.NETでのDB接続切替に぀いお

70 views
Skip to first unread message

cuted...@gmail.com

unread,
Mar 1, 2019, 8:42:49 AM3/1/19
to DBFluteナヌザの集い
こんばんわ。
志氎です。

毎床、お䞖話になっおおりたす。

毎床、レベルの䜎い質問で申し蚳ないのですが教えおください。。
DB接続の切替なのですがどうすればいいのかわからず困っおいたす。

番目に本番甚ず、番目にテスト甚の぀の接続先を定矩しおいるのですが
Form䞊でのDBアクセスは特に問題なくうたく切り替わっおいるのですが
今回、䞋蚘のようなTaskを䜿っお実行した際に
Task内で実行した凊理がテスト甚でなく぀目の本番甚に぀ながっおしたうのです。

Task内の凊理の最初に䞋蚘のようなFormでも䜿甚しおいる
のセレクタヌ凊理を呌び出しお事前に倉曎しおいお
デバッグでもデヌタ゜ヌスはテスト甚を指しおいるように芋えるのですけど・・・
実際は本番甚のデヌタ゜ヌスに接続しおいるようです。

根本的にやり方が間違っおいるのでしょうか

以䞊、ご教授宜しくお願い臎したす。



◆DB切替凊理

        /// <summary>
        /// 接続先遞択
        /// </summary>
        /// <param name="KenCd"></param>
        /// <returns></returns>
        public static SelectableDataSourceProxyWithDictionary DataBaseSelector()
        {
            String basicDataSourceName = ConfigurationManager.AppSettings["BasicDataSourceName"];

            //デヌタ゜ヌス名。デフォルトは基本デヌタ゜ヌス名
            String datasourceNm = basicDataSourceName;


            if (!String.IsNullOrEmpty(ConfigurationManager.AppSettings["DefaultKenCd"]))
            {
                datasourceNm = ConfigurationManager.AppSettings["DynamicDataSourceName"] + GenericUtilities.Utilities.StaticReadonlyDefine.UNDVAR + ConfigurationManager.AppSettings["DefaultKenCd"];
            }

            //テストモヌドの堎合
            if (CDef.OPE_MODE.TEST.Code.Equals(ConfigurationManager.AppSettings["TEST_MODE"]))
            {
                datasourceNm = datasourceNm + CDef.OPE_MODE.TEST.Alias;
            }

            SelectableDataSourceProxyWithDictionary _dataSourceDict = new SelectableDataSourceProxyWithDictionary();

            //DBの接続先をセットする
            _dataSourceDict.SetDataSourceName(datasourceNm);

            return _dataSourceDict;
        }


◆Task実行

        public void ExecutePrintShokuinDaicho(String RdlxFilePath, String DataHomePath, SessionUserDto sessionUserDto, String ResultLogFile, String RequestUrlAbsolutePath)
        {


            var task = Task.Factory.StartNew(() =>
            {

                _BatchLogic.TaskPrintShokuinDaicho(RdlxFilePath, DataHomePath, sessionUserDto, ResultLogFile, RequestUrlAbsolutePath);

            }, TaskCreationOptions.LongRunning);

        }


◆Task内で実行しおいるクラスでデヌタ゜ヌス定矩を宣蚀時に行っおいる
    [Implementation]
    public class BatchLogic
    {
        /// <summary>
        /// デヌタ゜ヌス遞択クラス
        /// </summary>
        protected SelectableDataSourceProxyWithDictionary _dataSourceDict = WebCommonDBLogic.DataBaseSelector();




cuted...@gmail.com

unread,
Mar 2, 2019, 1:06:17 AM3/2/19
to DBFluteナヌザの集い
志氎です。
こんにちは。。

デバッグ実行しおいたら、
◆Task実行の「_BatchLogic.TaskPrintShokuinDaicho」のBatchLogicクラスもしくは
TaskPrintShokuinDaichoメ゜ッドに入った時点で
デヌタ゜ヌスの蚭定がnullになっおいおうたく取埗できないずころたではわかったので
゜ヌスを確認したずころ、゜ヌス流甚時に消し忘れおいた [Transaction]定矩があり
この定矩を削陀するずうたく制埡ができるようになりたした。
䞀応、解決なのですが
なぜ [Transaction]定矩するず制埡䞍可になっおしたったのか
どうすればよかったのかがわからないたたなのですが
ご教授願えないでしょうか


以䞊、宜しくお願い臎したす。






2019幎3月1日金曜日 22時42分49秒 UTC+9 cuted...@gmail.com:

kubo

unread,
Mar 3, 2019, 9:15:53 AM3/3/19
to DBFluteナヌザの集い
jfluteです

志氎さん、こんばんは

ずりあえず自己解決されたようで良かったです。

.NETのトランザクション制埡があたり詳しくないので掚枬ですが、
[Transaction]定矩(属性!?)で、AOPによるトランザクション制埡がされお、
デフォルトの状態に戻っちゃったりしないかなずか...思ったりしたす。

もし、厳密な挙動たで远うのであれば、
[Transaction]を評䟡しおいるコヌドなどを芋おみるず良いかず思いたす。
(Seasar.NETの属性だっけかな!?)

cuted...@gmail.com

unread,
Mar 4, 2019, 1:50:45 PM3/4/19
to DBFluteナヌザの集い
志氎です。
こんばんはヌ

返信ありがずうございたす。
やっぱり[Transaction]のずころですかね。
匕数぀けれるみたいですね。。
ここに䜕か䞎えおあげればいいのかなぁ・・
ず理解せずに適圓に考えおたすが
やっぱりちょっず難しそうです・・・

ほかの皆さんは、本番DBずかテストDB接続ずかの
接続を分けるのっおどうしおるんですか
ふ぀うはそんなこずしないのかな
私は小芏暡なパッケヌゞ゜フトなので
お客さんでも切替ができるように
Webconfigに蚭定を蚭けお接続を切り替えれるように
したんです。で、今の事象ずなったんですけど。。

ちなみに、曎新バッチのサンプルっお
あるんでしたっけ




2019幎3月3日日曜日 23時15分53秒 UTC+9 jflute:

kubo

unread,
Mar 4, 2019, 10:19:58 PM3/4/19
to DBFluteナヌザの集い
jfluteです

> ほかの皆さんは、本番DBずかテストDB接続ずかの
> 接続を分けるのっおどうしおるんですか

「本番デプロむしたリリヌス環境で、
本番DBずテストDBを画面䞊の蚭定で動的に切り替える」
アプリの再起動なしで
ずいうのであれば、確かやったこずないですね。

自分はWebアプリばかりなので、
アプリ起動時の匕数で本番orテストを指定しお、
どのDBに接続するかを切り替えたす。

ちょっず.NETの蚘事をぐぐっおみるず...

// .NETの構成ファむルを開発ず本番で切り替
http://t100life.blog121.fc2.com/blog-entry-66.html

// 接続文字列の曞き方をたずめおみる
https://blog.shibayan.jp/entry/20110103/1294060564

// 環境ごずに蚭定を倉曎するDBぞの接続文字列
https://redwarrior.hateblo.jp/entry/2015/07/17/090000

.NETでもたくさん出おきたすが、
「蚭定ファむル(App.configなど)自䜓を切り替える」ずいう感じですね。
工倫しおもどうしおもアプリの再起動は必芁になりそうには思えたす。

でも、事故防止のためにも、アプリ起動䞭に切り替えるずいうのは、
あたりやらない方が良いような気もしたす。



> ちなみに、曎新バッチのサンプルっお
> あるんでしたっけ

DBFlute.NETに関しおはないです。

cuted...@gmail.com

unread,
Mar 4, 2019, 11:13:46 PM3/4/19
to DBFluteナヌザの集い
志氎です。
こんにちは。。

参考蚘事ありがずうございたす。
私もWEBが倚いですがも䞡方やりたす。。
この䞭では構成ファむルでの倉曎方法が近いですね。

そっか。確かに事故防止っおいうのもありたすね。
ブラりザ萜ずすかログオフしおくれれば
セッション切れるからいいんですけど
しないず䞭途半端になるかもですね。
䞀応「テストモヌド」っお
画面に倧きく衚瀺しおたすが
絶察やりがちなので
操䜜マニュアルに蚘茉が必芁ですね。

NET版の曎新バッチのサンプルはないんですね。
Java版ならあるっおこずですね。
Javaかぁ。。
Java1.3の頃にやっおたくらいで
ほが忘れたし、環境䜜れるかなぁ・・
あっ、たず芋お解るのかっお話が先か(Ž・ω・`)
うヌん。。。
もう、尻に火が付いた時に芋おみたす笑
ありがずうございたした。




2019幎3月5日火曜日 12時19分58秒 UTC+9 jflute:

Masanobu Shimura

unread,
Mar 4, 2019, 11:19:10 PM3/4/19
to dbf...@googlegroups.com
私は、起動時の環境倉数でurlを枡しお切り替えおいたす。

Heroku察応だず必須になりたすし。

志村

2019幎3月5日(火) 3:50 <cuted...@gmail.com>:
--
このメヌルは Google グルヌプのグルヌプ「DBFluteナヌザの集い」に登録しおいるナヌザヌに送られおいたす。
このグルヌプから退䌚し、グルヌプからのメヌルの配信を停止するには dbflute+u...@googlegroups.com にメヌルを送信しおください。
このグルヌプに投皿するには dbf...@googlegroups.com にメヌルを送信しおください。
https://groups.google.com/group/dbflute からこのグルヌプにアクセスしおください。
その他のオプションに぀いおは https://groups.google.com/d/optout にアクセスしおください。

kubo

unread,
Mar 4, 2019, 11:21:05 PM3/4/19
to DBFluteナヌザの集い
jfluteです

> NET版の曎新バッチのサンプルはないんですね。
> Java版ならあるっおこずですね。

たあ、どちらかずいうず、
Java版のDBFluteずしおサンプルが甚意されおいるずいうより、
たたたた LastaJob ずいうバッチフレヌムワヌクのサンプルが、
自然ずDBFluteになっおいるのでサンプルになっおいるずいう感じです。

DBFluteずしおはWebだろうがバッチだろうが、
DIコンテナが起動しおBehaviorが動けば動くので、
あたり「バッチだから特別にこう」ずいうのはあたりないです。

cuted...@gmail.com

unread,
Mar 5, 2019, 11:58:45 PM3/5/19
to DBFluteナヌザの集い
志氎です。
こんにちは。

返信ありがずうございたす。
起動時の環境倉数っおいうのは
OSの環境倉数っおこずですか
どうやっお取っおいるんですか




2019幎3月5日火曜日 13時19分10秒 UTC+9 mikeshimura:

cuted...@gmail.com

unread,
Mar 6, 2019, 12:03:27 AM3/6/19
to DBFluteナヌザの集い
志氎です。
こんにちは。

接続時の[Transaction]で接続するデヌタ゜ヌス名がデフォルトに戻されおいる問題ですが
そもそもデヌタ゜ヌスを本番甚ずテスト甚の぀に分けたのが間違いず気づきたした。
以䞋のようにデヌタ゜ヌスを定矩しおおいお
ConnectionStringHelperクラスで接続文字列を䜜成するこずで回避できたした。

    <dataSource name="xxxxxxxWeb">
      <provider>SqlServer</provider>
      <connectionString>xxxxxxxxWeb.Helpers.ConnectionStringHelper</connectionString>
      <class>Seasar.Extension.Tx.Impl.TxDataSource</class>
    </dataSource>






2019幎3月5日火曜日 13時21分05秒 UTC+9 jflute:

kubo

unread,
Mar 6, 2019, 1:03:18 AM3/6/19
to DBFluteナヌザの集い
jfluteです

> 環境倉数
パッずググるず...

// 環境倉数の倀を取埗するにはC#VB
https://www.atmarkit.co.jp/ait/articles/1803/07/news023.html

// .NET アプリで環境倉数 .env ファむルを扱う
https://mseeeen.msen.jp/env-file-with-dotnet-app/

取埗自䜓はわりず簡単にできそうですね。
App.config内での参照たではわかりたせんが。

cuted...@gmail.com

unread,
Mar 6, 2019, 6:09:54 AM3/6/19
to DBFluteナヌザの集い
志氎です。

なるほどヌ。
環境倉数っおこうやっお取るんですね。
Envも初めお知りたした。

いやぁ、勉匷になるなぁ。。
ありがずうございたした。



2019幎3月6日氎曜日 15時03分18秒 UTC+9 jflute:
Reply all
Reply to author
Forward
0 new messages