Skip to content

Commit

Permalink
docs: update
Browse files Browse the repository at this point in the history
  • Loading branch information
czy88840616 committed Jan 1, 2025
1 parent 49d9bbb commit 717c20a
Show file tree
Hide file tree
Showing 12 changed files with 181 additions and 57 deletions.
10 changes: 5 additions & 5 deletions packages/core/src/common/dataSourceManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ export abstract class DataSourceManager<
protected dataSourcePriority: Record<string, string> = {};

@Inject()
protected appDir: string;
protected baseDir: string;

@Inject()
protected environmentService: MidwayEnvironmentService;
Expand All @@ -39,7 +39,7 @@ export abstract class DataSourceManager<
dataSourceConfig: DataSourceManagerConfigOption<ConnectionOpts>,
baseDirOrOptions:
| {
baseDir: string;
baseDir?: string;
entitiesConfigKey?: string;
concurrent?: boolean;
}
Expand All @@ -61,7 +61,7 @@ export abstract class DataSourceManager<
}

const {
baseDir,
baseDir = this.baseDir,
entitiesConfigKey = 'entities',
concurrent,
} = baseDirOrOptions;
Expand Down Expand Up @@ -277,15 +277,15 @@ export function formatGlobString(globString: string): string[] {

export async function globModels(
globString: string,
appDir: string,
baseDir: string,
loadMode?: ModuleLoadType
) {
const pattern = formatGlobString(globString);

const models = [];
// string will be glob file
const files = run(pattern, {
cwd: appDir,
cwd: baseDir,
ignore: IGNORE_PATTERN,
});
for (const file of files) {
Expand Down
1 change: 1 addition & 0 deletions packages/core/src/common/serviceFactory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ export abstract class ServiceFactory<T> implements IServiceFactory<T> {
for (const [name, value] of this.clients.entries()) {
await this.destroyClient(value, name);
}
this.clients.clear();
}

public getDefaultClientName(): string {
Expand Down
19 changes: 10 additions & 9 deletions packages/core/test/common/serviceFactory.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,10 @@ describe('test/common/serviceFactory.test.ts', () => {
});
expect(instance.get('bbb')).toBeDefined();
expect(instance.get('ccc')).toBeDefined();
expect(instance.get('bbb').isClose).toBeFalsy();
let ins = instance.get('bbb');
expect(ins.isClose).toBeFalsy();
await instance.stop();
expect(instance.get('bbb').isClose).toBeTruthy();
expect(ins.isClose).toBeTruthy();
});

it('should test default client', async () => {
Expand Down Expand Up @@ -146,7 +147,7 @@ describe('test/common/serviceFactory.test.ts', () => {
it('should initialize clients serially by default', async () => {
const instance = new TestServiceFactory();
const startTime = Date.now();

await instance.initClients({
clients: {
client1: {},
Expand All @@ -157,20 +158,20 @@ describe('test/common/serviceFactory.test.ts', () => {

const clients = instance.getClients();
const creationTimes = Array.from(clients.values()).map(client => client.createdAt);

// 验证客户端是按顺序创建的
for (let i = 1; i < creationTimes.length; i++) {
expect(creationTimes[i] - creationTimes[i-1]).toBeGreaterThanOrEqual(90);
}

// 总时间应该接近 300ms (3个客户端 * 100ms)
expect(Date.now() - startTime).toBeGreaterThanOrEqual(290);
});

it('should initialize clients concurrently when concurrent option is true', async () => {
const instance = new TestServiceFactory();
const startTime = Date.now();

await instance.initClients({
clients: {
client1: {},
Expand All @@ -181,12 +182,12 @@ describe('test/common/serviceFactory.test.ts', () => {

const clients = instance.getClients();
const creationTimes = Array.from(clients.values()).map(client => client.createdAt);

// 验证所有客户端创建时间应该接近
for (let i = 1; i < creationTimes.length; i++) {
expect(creationTimes[i] - creationTimes[i-1]).toBeLessThan(50);
}

// 总时间应该接近 100ms
expect(Date.now() - startTime).toBeLessThan(200);
});
Expand All @@ -202,7 +203,7 @@ describe('test/common/serviceFactory.test.ts', () => {
}

const instance = new ErrorTestServiceFactory();

await expect(instance.initClients({
clients: {
client1: {},
Expand Down
5 changes: 0 additions & 5 deletions packages/leoric/src/dataSourceManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import {
DataSourceManager,
ILogger,
Init,
Inject,
Logger,
Provide,
Scope,
Expand All @@ -24,9 +23,6 @@ export class LeoricDataSourceManager extends DataSourceManager<
@Logger('coreLogger')
coreLogger: ILogger;

@Inject()
baseDir: string;

@Init()
async init() {
if (Object.keys(this.leoricConfig.dataSource).length > 1) {
Expand All @@ -35,7 +31,6 @@ export class LeoricDataSourceManager extends DataSourceManager<
}
}
await this.initDataSource(this.leoricConfig, {
baseDir: this.baseDir,
entitiesConfigKey: 'models',
concurrent: true,
});
Expand Down
4 changes: 0 additions & 4 deletions packages/mikro/src/dataSourceManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,12 @@ export class MikroDataSourceManager extends DataSourceManager<
@Config('mikro')
mikroConfig;

@Inject()
baseDir: string;

@Inject()
loggerService: MidwayLoggerService;

@Init()
async init() {
await this.initDataSource(this.mikroConfig, {
baseDir: this.baseDir,
concurrent: true,
});
}
Expand Down
4 changes: 0 additions & 4 deletions packages/mongoose/src/manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,6 @@ export class MongooseDataSourceManager extends DataSourceManager<mongoose.Connec
@Logger('coreLogger')
logger;

@Inject()
baseDir: string;

@Init()
async init() {
if (this.config.client) {
Expand All @@ -42,7 +39,6 @@ export class MongooseDataSourceManager extends DataSourceManager<mongoose.Connec
this.config.dataSource = this.config.clients;
}
await this.initDataSource(this.config, {
baseDir: this.baseDir,
concurrent: true,
});
}
Expand Down
5 changes: 0 additions & 5 deletions packages/sequelize/src/dataSourceManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import {
Logger,
Provide,
Scope,
Inject,
ScopeEnum,
DataSourceManager,
ILogger,
Expand All @@ -20,13 +19,9 @@ export class SequelizeDataSourceManager extends DataSourceManager<Sequelize> {
@Logger('coreLogger')
coreLogger: ILogger;

@Inject()
baseDir: string;

@Init()
async init() {
await this.initDataSource(this.sequelizeConfig, {
baseDir: this.baseDir,
concurrent: true,
});
}
Expand Down
4 changes: 0 additions & 4 deletions packages/typeorm/src/dataSourceManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,12 @@ export class TypeORMDataSourceManager extends DataSourceManager<DataSource> {
@ApplicationContext()
applicationContext: IMidwayContainer;

@Inject()
baseDir: string;

@Inject()
loggerService: MidwayLoggerService;

@Init()
async init() {
await this.initDataSource(this.typeormConfig, {
baseDir: this.baseDir,
concurrent: true,
});
}
Expand Down
47 changes: 41 additions & 6 deletions site/docs/data_source.md
Original file line number Diff line number Diff line change
Expand Up @@ -111,21 +111,27 @@ export class MySqlDataSourceManager extends DataSourceManager<mysql.Connection>
@Config('mysql')
mysqlConfig;

@Inject()
baseDir: string;

@Init()
async init() {
// 需要注意的是,这里第二个参数需要传入一个实体类扫描地址
await this.initDataSource(this.mysqlConfig, this.baseDir);
await this.initDataSource(this.mysqlConfig, {
concurrent: true
});
}

// ...
}


```

从 v4.0.0 开始,`initDataSource` 方法支持第二个参数,用于传递初始化选项。

可选的值有:

- `baseDir`: 实体类扫描起始地址,可选,默认是 `src` 或者 `dist`
- `entitiesConfigKey`: 实体类配置键,框架会从配置中的这个 key 获取实体类,可选,默认是 `entities`
- `concurrent`: 是否并发初始化,可选,为了向前兼容,默认是 `false`


`src/config/config.default` 中,我们可以提供多数据源的配置,来创建多个数据源。

比如:
Expand Down Expand Up @@ -156,6 +162,35 @@ export const mysql = {

数据源天然就是为了多个实例而设计的,和服务工厂不同,没有单个和多个的配置区别。

### 3、实例化数据源管理器

为了方便用户使用,我们还需要提前将数据源管理器创建,一般来说,只需要在组件或者项目的 `onReady` 生命周期中实例化,在 `onStop` 生命周期中销毁。

```typescript
import { Configuration } from '@midwayjs/core';

@Configuration({
imports: [
// ...
]
})
export class ContainerConfiguration {
private mysqlDataSourceManager: MySqlDataSourceManager;

async onReady(container) {
// 实例化数据源管理器
this.mysqlDataSourceManager = await container.getAsync(MySqlDataSourceManager);
}

async onStop() {
// 销毁数据源管理器
if (this.mysqlDataSourceManager) {
await this.mysqlDataSourceManager.stop();
}
}
}
```



## 实体绑定
Expand Down
Loading

0 comments on commit 717c20a

Please sign in to comment.