2020-06-02 10:00:26 +00:00
|
|
|
import { plugin, database } from '@ccms/api'
|
2020-06-20 08:39:03 +00:00
|
|
|
import { provideSingleton, inject, postConstruct } from '@ccms/container'
|
|
|
|
import { DataBase, DataBaseConfig } from './database'
|
2020-06-02 10:00:26 +00:00
|
|
|
|
|
|
|
@provideSingleton(database.DataBaseManager)
|
|
|
|
export class DataBaseManager {
|
|
|
|
@inject(plugin.PluginInstance)
|
|
|
|
private instance: any
|
|
|
|
|
|
|
|
private beanFactory: any
|
|
|
|
private mainDatabase: DataBase
|
|
|
|
private databases: { [key: string]: DataBase } = {}
|
|
|
|
|
|
|
|
@postConstruct()
|
|
|
|
initialize() {
|
|
|
|
try {
|
|
|
|
this.beanFactory = this.instance.getAutowireCapableBeanFactory()
|
|
|
|
let mainDatasource = this.beanFactory.getBean(Packages.javax.sql.DataSource.class)
|
2020-06-20 08:39:03 +00:00
|
|
|
this.mainDatabase = new DataBase({ url: mainDatasource })
|
2020-06-02 10:00:26 +00:00
|
|
|
} catch (error) {
|
|
|
|
console.ex(error)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-06-20 08:39:03 +00:00
|
|
|
/**
|
|
|
|
* 获得主数据库
|
|
|
|
* Get MainDatabase
|
|
|
|
*/
|
2020-06-02 10:00:26 +00:00
|
|
|
getMainDatabase() {
|
|
|
|
return this.mainDatabase
|
|
|
|
}
|
|
|
|
|
2020-06-20 08:39:03 +00:00
|
|
|
/**
|
|
|
|
* 创建数据库
|
|
|
|
* Create A Database Instance
|
|
|
|
* @param name 数据库名称 用于代码 database Name use at code
|
|
|
|
* @param config 数据库配置
|
|
|
|
*/
|
|
|
|
createDatabase(name: string, config: DataBaseConfig) {
|
2020-06-02 10:00:26 +00:00
|
|
|
Java.synchronized(() => {
|
|
|
|
if (this.databases[name]) return this.databases[name]
|
2020-06-20 08:39:03 +00:00
|
|
|
return this.databases[name] = new DataBase(config)
|
2020-06-02 10:00:26 +00:00
|
|
|
}, this.databases)()
|
|
|
|
}
|
|
|
|
|
|
|
|
getDatabase(name: string) {
|
|
|
|
return this.databases[name]
|
|
|
|
}
|
|
|
|
|
|
|
|
disable() {
|
|
|
|
Object.values(this.databases).forEach((ds) => ds?.close())
|
|
|
|
}
|
|
|
|
}
|