JNPF快速开发平台框架源码 java+Netcore版本 旗舰版企业版 低代码开发平台

JNPF快速开发平台采用Spring Security、OAuth2、JWT构建认证服务中心,支持OAuth2.0四种授权模式及Spring Social第三方登录。平台内置代码生成器,能根据数据库字段注释生成前端、移动端和后端代码,大幅降低开发工作量。此外,文章还提及了性能基准测试的相关代码示例。
部署运行你感兴趣的模型镜像

 JNPF快速开发平台基于 Spring Security、Spring OAuth2、JWT 实现的统一认证服务中心,登录基于 spring security 的标准登录流程。客户端授权支持 oauth2.0 的四种授权模式:授权码模式、简化模式、密码模式、客户端模式,授权流程跟标准的 oauth2 流程一致。web 端采用简化模式(implicit)登录系统,移动端可使用密码模式(password)登录系统。同时还支持基于Spring Social的三方账号登录方式,如微信/QQ、支付宝、微博等,并提供拓展模式,支持更多三方渠道。

基于Mybatis-plus-generator自定义了一套代码生成器, 通过配置数据库字段的注释,可在线生成WEB前端(vue)、移动端(vue)、后端(controller、entity、mapperxml、service)等代码,极大减少开发难度,减少70%以上的开发任务。

private string _hostname = Dns.GetHostName();

[Benchmark(OperationsPerInvoke = 1000, Baseline = true)]
public async Task GetHostAddresses()
{
    for (int i = 0; i < 1_000; i++)
        await Dns.GetHostAddressesAsync(_hostname);
}

[Benchmark(OperationsPerInvoke = 1000)]
public async Task GetHostAddresses_OneFamily()
{
    for (int i = 0; i < 1_000; i++)
        await Dns.GetHostAddressesAsync(_hostname, AddressFamily.InterNetwork);
}

private Uri _uri = new Uri("http://dot.net");

[Benchmark]
public string GetComponents() => _uri.GetComponents(UriComponents.PathAndQuery | UriComponents.Fragment, UriFormat.UriEscaped);

[Benchmark]
public Uri NewUri() => new Uri("http://dot.net");

[Benchmark]
public string PathAndQuery() => _uri.PathAndQuery;

private FileStream _fileStream;
private byte[] _buffer = new byte[1024];

[Params(false, true)]
public bool IsAsync { get; set; }

[Params(1, 4096)]
public int BufferSize { get; set; }

[GlobalSetup]
public void Setup()
{
    byte[] data = new byte[10_000_000];
    new Random(42).NextBytes(data);

    string path = Path.GetTempFileName();
    File.WriteAllBytes(path, data);

    _fileStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, BufferSize, IsAsync);
}

[GlobalCleanup]
public void Cleanup()
{
    _fileStream.Dispose();
    File.Delete(_fileStream.Name);
}

[Benchmark]
public void Read()
{
    _fileStream.Position = 0;
    while (_fileStream.Read(_buffer
#if !NETCOREAPP2_1_OR_GREATER
            , 0, _buffer.Length
#endif
            ) != 0) ;
}

[Benchmark]
public async Task ReadAsync()
{
    _fileStream.Position = 0;
    while (await _fileStream.ReadAsync(_buffer
#if !NETCOREAPP2_1_OR_GREATER
            , 0, _buffer.Length
#endif
            ) != 0) ;
}

 JNPF快速开发平台基于 Spring Security、Spring OAuth2、JWT 实现的统一认证服务中心,登录基于 spring security 的标准登录流程。客户端授权支持 oauth2.0 的四种授权模式:授权码模式、简化模式、密码模式、客户端模式,授权流程跟标准的 oauth2 流程一致。web 端采用简化模式(implicit)登录系统,移动端可使用密码模式(password)登录系统。同时还支持基于Spring Social的三方账号登录方式,如微信/QQ、支付宝、微博等,并提供拓展模式,支持更多三方渠道。

基于Mybatis-plus-generator自定义了一套代码生成器, 通过配置数据库字段的注释,可在线生成WEB前端(vue)、移动端(vue)、后端(controller、entity、mapperxml、service)等代码,极大减少开发难度,减少70%以上的开发任务。

private string _hostname = Dns.GetHostName();

[Benchmark(OperationsPerInvoke = 1000, Baseline = true)]
public async Task GetHostAddresses()
{
    for (int i = 0; i < 1_000; i++)
        await Dns.GetHostAddressesAsync(_hostname);
}

[Benchmark(OperationsPerInvoke = 1000)]
public async Task GetHostAddresses_OneFamily()
{
    for (int i = 0; i < 1_000; i++)
        await Dns.GetHostAddressesAsync(_hostname, AddressFamily.InterNetwork);
}

private string _hostname = Dns.GetHostName();

[Benchmark(OperationsPerInvoke = 1000, Baseline = true)]

public async Task GetHostAddresses()

{

    for (int i = 0; i < 1_000; i++)

        await Dns.GetHostAddressesAsync(_hostname);

}

[Benchmark(OperationsPerInvoke = 1000)]

public async Task GetHostAddresses_OneFamily()

{

    for (int i = 0; i < 1_000; i++)

        await Dns.GetHostAddressesAsync(_hostname, AddressFamily.InterNetwork);

}

private Uri _uri = new Uri("http://dot.net");

[Benchmark]

public string GetComponents() => _uri.GetComponents(UriComponents.PathAndQuery | UriComponents.Fragment, UriFormat.UriEscaped);

[Benchmark]

public Uri NewUri() => new Uri("http://dot.net");

[Benchmark]

public string PathAndQuery() => _uri.PathAndQuery;

private FileStream _fileStream;

private byte[] _buffer = new byte[1024];

[Params(false, true)]

public bool IsAsync { get; set; }

[Params(1, 4096)]

public int BufferSize { get; set; }

[GlobalSetup]

public void Setup()

{

    byte[] data = new byte[10_000_000];

    new Random(42).NextBytes(data);

    string path = Path.GetTempFileName();

    File.WriteAllBytes(path, data);

    _fileStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, BufferSize, IsAsync);

}

[GlobalCleanup]

public void Cleanup()

{

    _fileStream.Dispose();

    File.Delete(_fileStream.Name);

}

[Benchmark]

public void Read()

{

    _fileStream.Position = 0;

    while (_fileStream.Read(_buffer

#if !NETCOREAPP2_1_OR_GREATER

            , 0, _buffer.Length

#endif

            ) != 0) ;

}

[Benchmark]

public async Task ReadAsync()

{

    _fileStream.Position = 0;

    while (await _fileStream.ReadAsync(_buffer

#if !NETCOREAPP2_1_OR_GREATER

            , 0, _buffer.Length

#endif

            ) != 0) ;

}

private Uri _uri = new Uri("http://dot.net");

[Benchmark]
public string GetComponents() => _uri.GetComponents(UriComponents.PathAndQuery | UriComponents.Fragment, UriFormat.UriEscaped);

[Benchmark]
public Uri NewUri() => new Uri("http://dot.net");

[Benchmark]
public string PathAndQuery() => _uri.PathAndQuery;

private FileStream _fileStream;
private byte[] _buffer = new byte[1024];

[Params(false, true)]
public bool IsAsync { get; set; }

[Params(1, 4096)]
public int BufferSize { get; set; }

[GlobalSetup]
public void Setup()
{
    byte[] data = new byte[10_000_000];
    new Random(42).NextBytes(data);

    string path = Path.GetTempFileName();
    File.WriteAllBytes(path, data);

    _fileStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, BufferSize, IsAsync);
}

[GlobalCleanup]
public void Cleanup()
{
    _fileStream.Dispose();
    File.Delete(_fileStream.Name);
}

[Benchmark]
public void Read()
{
    _fileStream.Position = 0;
    while (_fileStream.Read(_buffer
#if !NETCOREAPP2_1_OR_GREATER
            , 0, _buffer.Length
#endif
            ) != 0) ;
}

[Benchmark]
public async Task ReadAsync()
{
    _fileStream.Position = 0;
    while (await _fileStream.ReadAsync(_buffer
#if !NETCOREAPP2_1_OR_GREATER
            , 0, _buffer.Length
#endif
            ) != 0) ;
}

从行业发展看,构建以数据为驱动、以客户为中心、以市场需求为导向的产品和服务供应体系,是企业在市场竞争中存活下来的关键。随着新技术、新模式、新应用的持续涌现,以下就是我们总结的,关于2022 年中国数字化转型十大发展趋势。

您可能感兴趣的与本文相关的镜像

EmotiVoice

EmotiVoice

AI应用

EmotiVoice是由网易有道AI算法团队开源的一块国产TTS语音合成引擎,支持中英文双语,包含2000多种不同的音色,以及特色的情感合成功能,支持合成包含快乐、兴奋、悲伤、愤怒等广泛情感的语音。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值