46 lines
1.4 KiB
TypeScript
46 lines
1.4 KiB
TypeScript
|
import { plugin, database } from '@ccms/api'
|
||
|
import { provideSingleton, inject, postConstruct, Container, ContainerInstance } from '@ccms/container'
|
||
|
import { DataBase } from './database'
|
||
|
|
||
|
@provideSingleton(database.DataBaseManager)
|
||
|
export class DataBaseManager {
|
||
|
@inject(ContainerInstance)
|
||
|
private container: Container
|
||
|
@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)
|
||
|
this.mainDatabase = new DataBase(mainDatasource)
|
||
|
} catch (error) {
|
||
|
console.ex(error)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
getMainDatabase() {
|
||
|
return this.mainDatabase
|
||
|
}
|
||
|
|
||
|
createDatabase(name: string, url: string, username: string, password: string) {
|
||
|
Java.synchronized(() => {
|
||
|
if (this.databases[name]) return this.databases[name]
|
||
|
return this.databases[name] = new DataBase(url, username, password)
|
||
|
}, this.databases)()
|
||
|
}
|
||
|
|
||
|
getDatabase(name: string) {
|
||
|
return this.databases[name]
|
||
|
}
|
||
|
|
||
|
disable() {
|
||
|
Object.values(this.databases).forEach((ds) => ds?.close())
|
||
|
}
|
||
|
}
|