DataSourceUtil.java 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. package jnpf.database.util;
  2. import com.baomidou.mybatisplus.annotation.TableField;
  3. import jnpf.base.entity.SuperExtendEntity;
  4. import jnpf.database.model.entity.DbLinkEntity;
  5. import jnpf.database.model.interfaces.DbSourceOrDbLink;
  6. import jnpf.database.sql.model.DbStruct;
  7. import jnpf.exception.DataException;
  8. import jnpf.util.StringUtil;
  9. import lombok.Data;
  10. import org.springframework.beans.BeanUtils;
  11. import org.springframework.boot.context.properties.ConfigurationProperties;
  12. import org.springframework.stereotype.Component;
  13. /**
  14. * 数据源基础工具类
  15. *
  16. * @author JNPF开发平台组
  17. * @version V3.1.0
  18. * @copyright 引迈信息技术有限公司
  19. * @date 2021/3/16 8:49
  20. */
  21. @Data
  22. @Component
  23. @ConfigurationProperties(prefix = "spring.datasource")
  24. public class DataSourceUtil extends SuperExtendEntity.SuperExtendDescriptionEntity implements DbSourceOrDbLink {
  25. /**
  26. * 数据库类型
  27. */
  28. @TableField("f_db_type")
  29. private String dbType;
  30. /**
  31. * 主机ip
  32. */
  33. @TableField("f_host")
  34. private String host;
  35. /**
  36. * 端口
  37. */
  38. @TableField("f_port")
  39. private Integer port;
  40. /**
  41. * 库名
  42. */
  43. @TableField("f_service_name")
  44. private String dbName;
  45. /**
  46. * 用户
  47. */
  48. @TableField("f_user_name")
  49. private String userName;
  50. /**
  51. * 密码
  52. */
  53. @TableField("f_password")
  54. private String password;
  55. /**
  56. * 表空间
  57. */
  58. @TableField(value = "f_table_space")
  59. private String dbTableSpace;
  60. /**
  61. * 模式
  62. */
  63. @TableField(value = "f_db_schema")
  64. private String dbSchema;
  65. /**
  66. * 数据连接jdbc-url参数
  67. */
  68. @TableField(exist = false)
  69. private String urlParams;
  70. /**
  71. * url地址
  72. */
  73. @TableField(exist = false)
  74. private String url;
  75. /**
  76. * 数据连接jdbc-url参数
  77. */
  78. @TableField(exist = false)
  79. private String prepareUrl;
  80. /**
  81. * 驱动包
  82. */
  83. @TableField(exist = false)
  84. private String driver;
  85. /**
  86. * oracle多方式登录参数
  87. */
  88. @TableField(value = "f_oracle_param")
  89. private String oracleParam;
  90. public String getAutoUsername() throws DataException {
  91. if(StringUtil.isEmpty(this.userName)){
  92. return DbTypeUtil.getEncodeDb(this.dbType).getDbaUsername();
  93. }else {
  94. return this.userName;
  95. }
  96. }
  97. public String getAutoPassword() throws DataException {
  98. if(StringUtil.isEmpty(this.password)){
  99. return getAutoUsername();
  100. }else {
  101. return this.password;
  102. }
  103. }
  104. /**
  105. * -- 这里的参数dataSourceUtil是spring托管的全局唯一变量,
  106. * New对象防止数据源互串,防止Bean覆盖
  107. * 获取数据源参数传参对象
  108. * 注意:此处方法不能命名为 get开头的名字,
  109. * 会出现copy bean转换时候的错误
  110. */
  111. public DbLinkEntity init(){
  112. return init(null);
  113. }
  114. /**
  115. * 多租户:获取数据源参数传参对象
  116. * @param dbName 库名
  117. * @return ignore
  118. */
  119. public DbLinkEntity init(String dbName){
  120. DbLinkEntity dbLinkEntity = new DbLinkEntity();
  121. BeanUtils.copyProperties(this, dbLinkEntity);
  122. if(StringUtil.isNotEmpty(dbName)){
  123. dbLinkEntity.setDbName(dbName);
  124. }
  125. return dbLinkEntity;
  126. }
  127. /**
  128. * 数据基础结构信息
  129. */
  130. public DbStruct getDbStruct(){
  131. DbStruct dbStruct = new DbStruct();
  132. // 用户名对应 (当数据库为Oracle与DM的时,schema默认与用户同名)
  133. dbStruct.setUserName(getUserName());
  134. dbStruct.setOracleDbSchema(getUserName());
  135. dbStruct.setDmDbSchema(getUserName());
  136. // 表空间
  137. dbStruct.setDbTableSpace(getDbTableSpace());
  138. //库名
  139. dbStruct.setMysqlDbName(getDbName());
  140. dbStruct.setSqlServerDbName(getDbName());
  141. dbStruct.setKingBaseDbName(getDbName());
  142. dbStruct.setPostGreDbName(getDbName());
  143. // 模式
  144. if(StringUtil.isNotEmpty(getDbSchema())){
  145. dbStruct.setOracleDbSchema(getDbSchema());
  146. dbStruct.setDmDbSchema(getDbSchema());
  147. dbStruct.setSqlServerDbSchema(getDbSchema());
  148. dbStruct.setKingBaseDbSchema(getDbSchema());
  149. dbStruct.setPostGreDbSchema(getDbSchema());
  150. }
  151. dbStruct.setOracleParam(getOracleParam());
  152. return dbStruct;
  153. }
  154. }