This was initially a bit of a mystery until I checked the IP of the azure SQL server. 

Googling for “**azure sql cannot create PoolableConnectionFactory**” I came across 
“[Failed to Create PoolableConnectionFactory When Connecting to Azure SQL Server Database from Spring / Hibernate Tomcat Application][1]” on MSDN 
with a recommendation to use **user=username@servername** in the connection string.

So I checked on Azure for the recommended JDBC connection string
[![enter image description here][2]][2]

**Resolution**

Edit C:\SDL\Web\deployer-combined\config\deployer-conf.xml

    <State>
        <Storage Adapter="mssql" driver="com.microsoft.sqlserver.jdbc.SQLServerDriver">
            <Property Name="host" Value="azurename.database.windows.net"/>
            <Property Name="port" Value="1433"/>
            <Property Name="database" Value="Tridion_Broker"/>
            <Property Name="user" Value="TridionBrokerUser@azurename"/>
            <Property Name="password" Value="********"/>
        </Storage>
    </State>

Edit C:\SDL\Web\deployer-combined\config\cd_storage_conf.xml

    <Storage Class="com.tridion.storage.persistence.JPADAOFactory" Id="defaultdb" Type="persistence" dialect="MSSQL">
        <Pool CheckoutTimeout="120" IdleTimeout="120" MonitorInterval="60" Size="10" Type="jdbc"/>
        <DataSource Class="com.microsoft.sqlserver.jdbc.SQLServerDataSource">
            <Property Name="serverName" Value="azurename.database.windows.net"/>
            <Property Name="portNumber" Value="1433"/>
            <Property Name="databaseName" Value="Tridion_Broker"/>
            <Property Name="user" Value="TridionBrokerUser@azurename"/>
            <Property Name="password" Value="*********"/>
        </DataSource>
    </Storage>

PowerShell UpdateConfJDBC.ps1 , 

    function UpdateConfJDBC()
    {
    <#
    .SYNOPSIS
     Update SDL Microservice JDBC Configuration 
    
    .DESCRIPTION
    Set JDBC name in the cd_storage-config.xml files for all SDL
    Microservices in the SDLWeb path
    The default cd_storage_conf.xml jdbc "user" must be changed to "user@azuredbname" 
    otherwize connection login fails with error 
    "sql cannot create PoolableConnectionFactory"
    see 
    https://tridion.stackexchange.com/questions/17586/publishing-fail-on-sdl-web-8-5-content-delivery-with-azure-sql 

    .EXAMPLE
     UpdateConfJDBC -filename "C:\SDL\Web\deployer-combined\config\cd_storage_conf.xml" -Verbose

     .EXAMPLE
     UpdateConfJDBC -filename "C:\SDL\Web\deployer-combined\config\deployer-conf.xml" -Verbose


     #>
    param(
        [Parameter(Mandatory=$true, ValueFromPipeline=$true)]
        $filename
    )

            Write-Verbose "Update Conf JDBC Processing $($filename)" 
            $Conf = New-Object System.Xml.XmlDocument
            $Conf.Load($filename)

            $state = $Conf.Deployer.State
            if ($state)
            {
                $user = $state.Storage.Property | Where-Object { $_.name -eq 'user' }
                $sqlhost = $state.Storage.Property | Where-Object { $_.name -eq 'host' }
                if ($sqlhost.value -like "*.database.windows.net")
                {
                    $dbname = $sqlhost.value.split(".")[0]
                    $user.value = [string]::Format("{0}@{1}", $user.value.split("@")[0],$dbname)
                    Write-Verbose "    Updated Deployer.State.Storage.Property.user.value to $($user.value)"
                    $Conf.Save($filename) 
                }
            }


            $Storage = $Conf.Configuration.Global.Storages.Storage | Where-Object { $_.Class -like 'com.tridion.storage.persistence.JPADAOFactory' }

            if ($Storage)
            {
                $user = $Storage.DataSource.Property | Where-Object { $_.name -eq 'user' }
                $sqlhost = $Storage.DataSource.Property | Where-Object { $_.name -eq 'serverName' }
                if ($sqlhost.value -like "*.database.windows.net")
                {
                    $dbname = $sqlhost.value.split(".")[0]
                    $user.value = [string]::Format("{0}@{1}", $user.value.split("@")[0],$dbname)
                    Write-Verbose "    Updated Configuration.Global.Storages.Storage.DataSource.Property.user.value to $($user.value)"
                    $Conf.Save($filename) 
                }
            }
                       
    }


I hope this helps you to move your solutions to use Azure SQL.

  [1]: https://social.msdn.microsoft.com/Forums/sqlserver/en-US/42d86f8a-f9f0-44a9-87e2-7005f18ec014/failed-to-create-poolableconnectionfactory-when-connecting-to-azure-sql-server-database-from-spring?forum=ssdsgetstarted&prof=required
  [2]: https://i.sstatic.net/SC1rU.png